函数的常用操作是将函数应用给一个列表的所有项,并使用结果创建一个新列表,例如:
sums = [1, 2, 3, 4, 5]
squares = []
for n in nums:
squares.append(n*n)
这种操作很常见,因此出现了叫做列表推导的运算符,例如:
nums = [1, 2, 3, 4, 5]
squares = [n*n for n in nums]
列表推导的一般语法如下:
[expression for item1 in iterable1 if condition1
for item2 in iterable2 if condition2
…
for itemN in iterableN if conditionN
]
这种语法大致上等价于以下代码:
s = []
for item1 in iterable1:
if condition1:
for item2 in iterable2:
if condition2:
...
for itemN in iterableN:
if conditionN: s.append(expression)
下面是几个例子:
>>> a = [-3,-2,-1,0,1,2,3]
>>> b = 'abc'
>>>
>>> [2*i for i in a]
[-6, -4, -2, 0, 2, 4, 6]
>>> [i for i in a if i >= 0]
[0, 1, 2, 3]
>>> [(x,y) for x in a for y in b if x>0]
[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]
>>>
>>> f = [(1,2), (3,4), (5,6)]
>>> [x**2+y**2 for x,y in f]
[5, 25, 61]
>>>
事实上,这些理论来自数学中的集合理论,例如编写[x**2 for x in a if x>0]这样的语句时,有点类似于指定一个集合{x² | x ∈ a, x > 0 }。
参考文献:《python参考手册》。