Ленивый функции map в Python

есть ли способ сделать map ленивый? Или есть еще одна его реализация, встроенная в Python?

Я хочу, чтобы что-то вроде этого работало:

from itertools import count

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

конечно, приведенный выше код не закончится, но я хотел бы просто ввести любое условие (или более сложную логику) внутри for и остановиться в какой-то момент.

2 ответов


использовать itertools.imap на Python 2.x или обновление до Python 3.x

вы также можете просто использовать простое выражение генератора, которое гораздо более pythonic:

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

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.