Python 高级特性之列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
举个例子,要生成一个list=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list=list(range(1,11))
但是,要是我们想得到 [1 * 1, 2 * 2, 3 * 3, …, 10 * 10]呢, 此时, 借助列表生成式可以很方便的实现:
>>>list=list(x*x for x in range(1,11))
由于1*1,2*2,3*3会自动计算,结果会变成:
>>>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
如果我们想保持格式呢,那就得转换成字符串 ['1 * 1', '2 * 2', '3 * 3', …, '10 * 10'],
>>>list=list("%d*%d"%(x,x) for x in range(1,11)) >>>['1*1', '2*2', '3*3', '4*4', '5*5', '6*6', '7*7', '8*8', '9*9', '10*10']
[x * x for x in range(1, 11)] 就是一个列表生成式, 它的基础语法是:
[exp for iter_var in iterable]
首先迭代 iterable 里所有内容, 每一次迭代, 都把 iterable 里相应内容放到 iter_var 中, 再在表达式 exp 中应用该 iter_var 的内容,
最后用表达式的计算值生成一个新的列表.
除了基础语法外, 列表生成式还可以使用两层循环:
>>>L = [(x, y) for x in range(2) for y in range(3)] >>>[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
还可以加上判断语句:
>>>N = [x for x in range(10) if x > 5] >>>[6, 7, 8, 9]
for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> for k, v in d.items():
... print(k, '=', v)
...
y = B
x = A
z = C
因此,列表生成式也可以使用两个变量来生成list:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']
最后把一个list中所有的字符串变成小写:
>>> L = ['Hello', 'World', 'IBM', 'Apple'] >>> [s.lower() for s in L] ['hello', 'world', 'ibm', 'apple']

浙公网安备 33010602011771号