Python——列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

【例】生成 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]怎么做?方法一是循环:

>>> li = []
>>>
>>> for i in range(1,11):
...     li.append(i*i)
...
>>>
>>> li
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list。

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环。

>>> li = [i*i for i in range(1,11)]
>>> li
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

for 循环后面还可以加上  if  判断,这样我们就可以筛选出仅偶数的平方:

>>> li = [i*i for i in range(1,11) if i % 2 == 0]
>>> li
[4, 16, 36, 64, 100]

还可以使用两层循环,可以生成全排列:

>>> [ i + j  for i in'ABC' for j in 'abc']
['Aa', 'Ab', 'Ac', 'Ba', 'Bb', 'Bc', 'Ca', 'Cb', 'Cc']

运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

>>> import os                   # 导入os模块
>>>
>>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录
['.android', '.eclipse', '.oracle_jre_usage', '.p2', '.tooling', '.webclipse', '.webclipse.properties', '3D Objects', 'AppData', 'Application Data', 'Contacts', 'Cookies', 'Desktop', 'Documents', 'Downloads', 'Favorites', 'IntelGraphicsProfiles', 'Links', 'Local Settings', 'MicrosoftEdgeBackups', 'Music', 'My Documents', 'NetHood', 'NTUSER.DAT', 'ntuser.dat.LOG1', 'ntuser.dat.LOG2', 'NTUSER.DAT{3d428192-a2c1-11e8-9681-951d081f8371}.TM.blf', 'NTUSER.DAT{3d428192-a2c1-11e8-9681-951d081f8371}.TMContainer00000000000000000001.regtrans-ms', 'NTUSER.DAT{3d428192-a2c1-11e8-9681-951d081f8371}.TMContainer00000000000000000002.regtrans-ms', 'ntuser.ini', 'OneDrive', 'Pictures', 'PrintHood', 'Recent', 'Saved Games', 'Searches', 'SendTo', 'Templates', 'Videos', '「开始」菜单']
>>>

for循环其实可以同时使用两个甚至多个变量,比如dictitems()可以同时迭代key和value:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>>
>>> for key , value in d.items():
...     print(key,' : ' ,value)
...
x  :  A
y  :  B
z  :  C

列表生成式也可以使用两个变量来生成list:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>>
>>> [k + '=' + v  for k,v in d.items()]
['x=A', 'y=B', 'z=C']

最后把一个list中所有的字符串变成小写:

>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>>
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
>>>

猜你喜欢

转载自blog.csdn.net/qq_41573234/article/details/81811197
今日推荐