美文网首页
Effective Python(7): 用列表推导来取代map

Effective Python(7): 用列表推导来取代map

作者: warmsirius | 来源:发表于2019-09-30 06:44 被阅读0次

一、列表推导

根据一份列表来制作另一份列表,在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)

显而易见,这种书写方式,让代码变得非常难懂。

三、字典和集

字典和集合也有和列表类似的推导机制。编写算法时,可以通过这些推导机制来创建衍生的数据结构。

四、要点

  • 列表推导式要比内置的mapfilter函数清晰,因为无需编写额外lambda表达式
  • 列表推导可以跳过输入列表中的某些元素,如果该用map,则需要filter辅助才能实现
  • 字典与集也支持推导表达式

相关文章

网友评论

      本文标题:Effective Python(7): 用列表推导来取代map

      本文链接:https://www.haomeiwen.com/subject/kewqpctx.html