Python中的惰性映射函数

时间:2013-03-08 01:22:36

标签: python map iterator lazy-evaluation

有没有办法使map懒惰?或者是否内置了Python的另一个实现?

我想要这样的事情发挥作用:

from itertools import count

for x in map(lambda x: x**2, count()):
    print x

当然,上面的代码不会结束,但我只想在for内输入任何条件(或更复杂的逻辑)并在某个时刻停止。

2 个答案:

答案 0 :(得分:37)

在Python 2.x上使用itertools.imap或升级到Python 3.x

你也可以使用一个更加pythonic的简单生成器表达式:

foo = (x**2 for x in count())

答案 1 :(得分:4)

itetools.imap很懒。

In [3]: itertools.imap?
Type:       type
String Form:<type 'itertools.imap'>
Docstring:
imap(func, *iterables) --> imap object

Make an iterator that computes the function using arguments from
each of the iterables.  Like map() except that it returns
an iterator instead of a list and that it stops when the shortest
iterable is exhausted instead of filling in None for shorter
iterables.