2023年7月26日发(作者:)
在python的List中使⽤for循环语句的技巧汇编for循环是最常⽤的循环语句,在各种⾼级编程语⾔中都会被频繁使⽤,在python中也不例外, 除了常规的for循环或者嵌套的for循环语法以外,python还有⼀种精巧的list内的for循环语句的语法,如果能熟练掌握这种语法对提⾼编程的效率有很⼤的帮助,今天我给⼤家我给⼤家分享⼀些我收集的关于list内使⽤for循环的⼩技巧,希望对⼤家有所帮助:1. 简单替换for循环它的主要语法结构如下:my_list=[ 表达式 for 循环项 in 循环体 (if 条件) ]这⾥表达式可以为循环项,也可以为循环项的函数或者⽅法,下⾯我们看给例⼦:name = "Donald Trump"#list内的for循环语法,只使⽤⼀句代码my_list = [c for c in name]print(name)print(my_list)传统的for 循环语法是这么写的:name = "Donald Trump"#传统for循环语法,需要使⽤三句代码my_list=[]for c in name: my_(c)
print(name)
print(my_list)在这⾥传统的for循环需要使⽤三句代码, ⽽list内的for循环只使⽤了⼀句代码实现了同样的功能,我们再看⼀个例⼦:array = [[16, 3, 7], [2, 24, 9], [4, 1, 12]]#表达式可以为循环项的函数row_min = [min(row) for row in array ]print(row_min)上⾯代码的作⽤是找出⼆维数组array(其实是list内嵌list)每⼀⾏的最⼩值,同样也只使⽤了⼀句代码。2.在list内的循环中使⽤if 条件names_list = ["Washington", "Trump", "Obama", "bush", "Clinton", "Reagan"]l1 = [name for name in names_list if with('W')]l2 = [name for name in names_list if with('W') or len(name) < 5]l3 = [name for name in names_list if len(name) < 5 and r()]print(l1, l2, l3)我们发现在list循环中也可以很⽅便的使⽤if条件 这⾥我们在for循环的尾部使⽤了if条件语句,如果换成传统的for循环语法可能⼜要增加许多⾏业代码了。3. 使⽤更加复杂的表达式names_list = ["washington", "trump", "obama", "bush", "clinton", "reagan"]#将⼈名⾸字母⼤写new_names = [lize() for name in names_list]print(new_names)这⾥我们list内的表达式使⽤了循环项name的⽅法capitalize(), 我们再看⼀个例⼦:my_list=[ 表达式(if...else 条件) for 循环项 in 循环体 ]names_list = ["Washington", "Trump", "Obama", "bush", "Clinton", "Reagan"]#在表达式中使⽤if条件new_names = [name if with('T') else 'Not President' for name in names_list]print(new_names)之前我们是在for循环的尾部添加if 条件,不过我们也可以在表达式中使⽤if条件语句。这⾥需要指出的是表达式内的if条件语句中必须要同时使⽤else语句,这和之前在for循环尾部添加if条件有所不同,这是因为在表达式内的if语句必须遵循给变量赋值的python语法如:a = 1b = 2 if a>0 # 语法错误b = 2 if a > 0 else -1
4.使⽤嵌套for循环语法可以在list内使⽤嵌套for循环语法,下⾯我们看⼀个例⼦:names_list = ["Trump", "Obama","Clinton"]#双重for循环chars = [c for name in names_list for c in name]print(chars)下⾯是传统的两层for循环语句:names_list = ["Trump", "Obama","Clinton"]#传统的双层for循环,需要使⽤4句代码chars = []for name in names_list: for c in name: (c)
print(chars)我们看到传统的双层嵌套for循环需要使⽤4句代码,⽽list内的双层for循环只使⽤了⼀句代码。当然传统代码的可读性要⽐要⽐list内循环语句更好⼀些,因此也不太建议在list内加⼊太多的for循环,这样会使代码的可读性变差。另外我们还可以在两层for循环的中间使⽤if条件:names_list = ["Trump", "Obama","bush"]#可以在两层for循环的中间使⽤if条件chars = [char for name in names_list if len(name) < 5 for char in name]print(chars)5. 尽量避免使⽤map(),filter()这样的内置函数python有⼀些内置函数如map()、filter(),这些内置函数使⽤简单,但是存在可读性差,不容易理解的缺点,⼀个良好的习惯是尽量使⽤list内的for循环来代替这些内置函数, 就连python的作者都建议这样做,⼤家可以读⼀下(),因为这样做可以使代码的可读性更好。map()函数可以这样替换:#map函数L = map(func, 循环体)# 替换为:L = [func(a) for a in 循环体]array = [[16, 3, 7], [2, 24, 9], [4, 1, 12]]row_min = map(min, array)print(list(row_min))#替换为row_min = [min(row) for row in array ]print(row_min)
filter()函数可以替换为:#filter函数L = filter(condition_func, 循环体)# 替换为L = [a for a in 循环体 if 条件]names_list = ["Trump", "Obama","bush"]#filter函数L1 = filter(lambda name: len(name) < 5, names_list)print(list(L1))#替换为:L2 = [name for name in names_list if len(name) < 5]print(L2)6. 尽量使⽤⽣成器(Generator)变量来减少内存开销
在python中定义⼀个list变量时,⼀般会给这个list变量⽴即分配内存,这种在定义变量时⽴即分配内存的⽅式会增加系统的内存开销,⽽⼀种⾼效的⽅法是只在定义变量时并不⽴即分配实际内存,只在真正使⽤变量时才会分配内存,这就是我们的Generator变量,在定义Generator变量时只要将原来list的⽅括号替换成圆括号即可:#list变量,⽴即分配实际内存L1 = [x for x in range(1_000_000)]#Generator变量,不分配实际内存L2 = (x for x in range(1_000_000))print(L1.__sizeof__())print(L2.__sizeof__())#list变量L1 = [ w for w in range(10)]for i in L1: print(i)#替换为⽣成器变量L2 = (w for w in range(10))for i in L2: print(i)结论在list中使⽤for循环,可以是代码变的简洁优雅,同时也不应增加过多的list内的for循环层数,这样会使程序的可读性变差。我们应尽量使⽤list的for循环来代替如map和filter等内置函数,因为这些内置函数也会使程序的可读性变差。最后我们应尽量使⽤⽣成器变量(Generator),因为它可以减少内存开销。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690305950a329642.html
评论列表(0条)