2019.7.22 列表生成式
1、生成一个包含元素从1到10的列表
L1=range(1,11)
L1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
range(m,n)——生成从m到n-1的数。
2、生成元素为1*1,2*2,……,9*9,10*10的列表
方法一:循环
L=[] for i in range(1,11): L.append(pow(i,2)) print L [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
方法二:列表生成器
L2=[x*x for x in range(1,11) ] L2 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
在使用列表生成器时,把要产生的元素放前边,后面跟for循环,就可以把List创建出来
for循环后还可以加if进行条件判断,比如我们要生成偶数的平方
L3=[x*x for x in range(1,11) if x%2==0] L3 [4, 16, 36, 64, 100]
还可以使用两层for循环,可以生成全排列
L4=[m+n for m in 'abc' for n in 'xyz'] L4 ['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
运用列表生成器,可以写出很简洁的代码,举例如下:
列出当前目录下的所有文件和目录名
>>> import os >>> [d for d in os.listdir('.')] ['.anaconda', '.android', '.astropy', '.conda', '.eclipse']
导入os模块,模块的知识以后会学到,os.listdir可以列出文件和目录
for循环的迭代可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value
>>> d={'a':1,'b':2,'c':3}
>>> for k,v in d.items():
... print (k,'=',v)
...
a = 1
b = 2
c = 3
因此,使用列表生成器可以由两个甚至多个变量来生成,注意的是,变量一定是放在for循环前
>>> [k+'='+str(v) for k,v in d.items()] ['a=1', 'b=2', 'c=3']
最后一个例子,把一个List中的所有大写字母小写
>>> L2=['Hello','World','Hello','Python'] >>> [i.lower() for i in L2 ] ['hello', 'world', 'hello', 'python']
这里用到了lower()函数用以把一个字符串对象中的大写字母变为小写,同理也可以转为大写,函数是upper()
补充:
如果一个List对象中即有字符串又有整数类型的元素,那么在用lower()或者upper()时会报错,只有List中全是字符串时才可以用这两个函数进行迭代。
因此我们可以利用isinstance()类型判断函数和if判断的结合进行迭代来达到对一个一般List对象(既有字符串类型,又有其他类型)的列表生成式。
>>> L4=['HELLO','WORLD',123,'HELLO','PYTHON',None] >>> [S.lower() for S in L4 if isinstance(S,str)] ['hello', 'world', 'hello', 'python']
注:字符串是str类型
小结:列表生成器的作用,①快速生成一个List;②根据一个List快速生成另一个与之有关的List

浙公网安备 33010602011771号