imap和ifilter与发电机理解

时间:2011-09-15 12:31:15

标签: python map filter iterator

我对这些微不足道的技术细节感到好奇 - 这两者在python的内部表现,性能和类似的东西之间存在差异。

1 个答案:

答案 0 :(得分:1)

一般情况下,不建议使用map和filter,但只使用一个函数进行映射过滤,它们很有用。但是从不使用map或过滤lambda考虑这个:

过滤器或地图更好的地方:

(i for i in iterable if i), filter(bool, i)
(int(i) for i in iterable), map(int, i)

看,它们更简单。但是,请考虑一下:

(i+3 for i in iterable), map(lambda i: i+3, iterable)
(i for i in iterable if i.isdigit()), filter(lambda i, i.isdigit(), iterable)

生成器表达式的一个优点是,您可以混合使用地图和过滤器功能。

(f(i) for i in iterable if g(i)), map(f, filter(g, iterable))

对我来说,规则是:

  • 切勿在地图或过滤器中使用lambda。
  • 如果您正在做什么,只使用地图或过滤器。
  • 其他一切,请使用生成器表达式。
  • 如果有疑问,请使用生成器表达式。

修改

忘了一件重要的事情:

在3岁以上的Python版本中,map(和filter)非常渴望,所以最好将它与列表推导进行比较。但是在Python 3上,map是懒惰的,它就像生成器表达式一样。