本文仅供个人记录和复习,不用于其他用途
列表生成式
之前我们讲过range
,可以快速生成一个有序列表。但是,如果我们生成不连续的列表呢?我们可以循环:
>>> for x in range(1, 11):
... L.append(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]
可以看出来,我们把下面的语句放到了for循环前面,整个列表生成式会返回一个list。
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']
那么我们可以做一个简单的练习,列出当前目录下所有的文件和目录名:
>>> import os
>>> [d for d in os.listdir('.')]
['def.py', 'def2.py', 'def3.py', 'for.py', 'for2.py', 'HelloName.py', 'HelloWorld.py', 'ifelse.py', 'qiepian.py']
之前我们说过,for循环可以使用两个变量来同时迭代索引和元素:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> for k, v in d.iteritems():
... print k, '=', v
...
y = B
x = A
z = C
列表生成式也可以使用两个变量来生成list:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C'}
>>> [k + '=' + v for k, v in d.iteritems()]
['y=B', 'x=A', 'z=C']
这里我们演示用的都是dict,因为dict可以让key和value一一对应,这里我们也知道了如何使用两个变量来获取dict的key和value。