有没有办法使map
懒惰?或者是否内置了Python的另一个实现?
我想要这样的事情发挥作用:
from itertools import count
for x in map(lambda x: x**2, count()):
print x
当然,上面的代码不会结束,但我只想在for
内输入任何条件(或更复杂的逻辑)并在某个时刻停止。
答案 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.