一、列表推导
根据一份列表来制作另一份列表,在Python中提供了一种精炼的写法:list comprehension
(列表推导)。
如果采用列表推导来实现,那就同时制定制作新列表时索要迭代的输入序列,以及计算新列表中每个元素的值时所用的表达式。
1. 对原列表中所有的元素操作
[func(i) for i in list]
a = [1, 2, 3, 4, 5]
squares = [x**2 for x in a]
print(squares)
>>>
[1, 4, 9, 16, 25]
2. 对原列表中特定条件过滤后的元素操作
[func(i) for i in list if 条件(i)]
a = [1, 2, 3, 4, 5]
even_squares = [x**2 for x in a if x % 2 == 0]
print(even_squares)
>>>
[4, 16]
二、map
+lambda
/filter
实现
map(lambda x: func(x), list)
1. 使用map
+lambda
实现对列表所有元素操作:
a = [1, 2, 3, 4, 5]
squares = map(lambda x: x**2, a)
map用起来比较复杂,这让代码看起来比较乱。
2. 使用map
+filter
实现对列表中某些特定条件元素操作
map(lambda x: func1(x), filter(lambda x: func2(x), a)
a = [1, 2, 3, 4, 5]
even_squares = map(lambda x: x**2, filter(lambda x: x % 2 == 0, a)
显而易见,这种书写方式,让代码变得非常难懂。
三、字典和集
字典和集合也有和列表类似的推导机制。编写算法时,可以通过这些推导机制来创建衍生的数据结构。
四、要点
- 列表推导式要比内置的
map
和filter
函数清晰,因为无需编写额外lambda
表达式 - 列表推导可以跳过输入列表中的某些元素,如果该用
map
,则需要filter
辅助才能实现 - 字典与集也支持推导表达式
网友评论