Python自动生成列表,列表生成器python
列表补集,或列表补集,是Python中非常简单但功能强大的内置公式,可用于创建列表。
例如,要生成list[1,2,3,4,5,6,7,8,9,10],可以使用list(range(1,11)):
List (range (1,11)) [1,2,3,4,5,6,7,8,9,10]但是如果要生成[1x1,2x2,3x3,10x10]?第一种方法是循环:
对于范围(1,11)中的x,L=[]:l .追加(x * x).L [1,4,9,16,25,36,49,64,81,100]但是循环太繁琐,列表生成公式可以用一行语句代替循环来生成上面的列表。
[x * x for x in range (1,11)] [1,4,9,16,25,36,49,64,81,100]写列表生成公式时,可以把要生成的元素x * x放在前面,后面跟着一个for循环来创建列表,非常有用。多写几次,就很
If判断也可以加在for循环之后,这样我们就可以过滤出只有偶数的平方:
[x * x for x in range (1,11) if x% 2==0] [4,16,36,64,100]还可以使用两层循环,这样可以生成全排列:
[m n for m in ABC for n in XYZ] [ax , ay , az , bx , by , BZ , CX , cy , cz]三层或更多循环很少使用。
使用列表生成,您可以编写非常简洁的代码。例如,列出当前目录中的所有文件和目录名可以通过一行代码来实现:
导入os #导入os模块,其概念将在后面描述[d for d in OS。列表目录( . ))] # OS。listdir可以列出文件和目录[.emacs.d ,。ssh ,。trash , adlm , applications , desktop , Documents , Downloads , Library , Movies , Pictures , Public , VirtualBox VMs , Workspace , Xcode]的循环实际上可以同时使用两个或更多变量。比如dict的items()可以同时迭代key和值:
D={x: a , y: b , z: c} for k,v in d.items():print (k,=,v).y=bx=az=c因此,在列表生成公式中也可以使用两个列表。
D={x: a , y: b , z: c} [k= v for k,v in d.items ()] [y=b , x=a , z=c]最后把一个
L=[Hello , World , IBM , Apple ][S . Lower()for S in L][ Hello , World , IBM , Apple] if.else在使用列表生成的时候,有些童鞋经常会混淆if的用法.否则。
例如,以下代码通常输出偶数:
[x for x in range (1,11) if x% 2==0] [2,4,6,8,10]但是,如果:
[x for x in range (1,11) if x% 2==0else0] file stdin ,line1 [x for x in range (1,11) if x% 2==0else0]语法错误:无效语法这是因为if后跟for是筛选条件,else不能被采用。
其他童鞋发现if前面一定要写for with else,否则会报错:
[x if x% 2==0 for x in range (1,11)] file stdin ,line1 [x if x% 2==0 for x in range (1,11)]语法错误:无效语法这是因为for之前的部分是一个表达式,它必须根据x计算结果,因此,考虑表达式:x if x% 2==0,它不能根据x计算结果,因为缺少else,并且必须添加else:
[x if x% 2==0 else -x for x in range (1,11)] [-1,2,-3,4,-5,6,-7,8,-9,10]上面for之前的表达式x if x% 2==0 else -x可以根据x计算出确定的结果。
可以看出,在一个列表生成公式中,如果.for之前的else是表达式,而for之后的if是筛选条件,不能取else。
更多信息请关注作者微信微信官方账号:胖哥真好看。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。