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

posted @ 2019-07-22 23:43  ShineLe  阅读(148)  评论(0)    收藏  举报