15

有没有变map懒的方法?还是在 Python 中内置了它的另一种实现?

我想要这样的工作:

from itertools import count

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

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

4

2 回答 2

43

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

您也可以只使用一个更 Pythonic 的简单生成器表达式:

foo = (x**2 for x in count())
于 2013-03-08T01:24:14.980 回答
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.
于 2013-03-08T01:24:02.870 回答