Подтвердить что ты не робот

Я не могу найти imap() в itertools в Python

У меня есть проблема, которую я хочу решить с помощью itertools.imap(). Однако после того, как я импортировал itertools в оболочку IDLE и вызвал itertools.imap(), оболочка IDLE сообщила мне, что itertools не имеет атрибута imap. Что не так?

>>> import itertools
>>> dir(itertools)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', '_grouper',     '_tee', '_tee_dataobject', 'accumulate', 'chain', 'combinations', 'combinations_with_replacement', 'compress', 'count', 'cycle', 'dropwhile', 'filterfalse', 'groupby', 'islice', 'permutations', 'product', 'repeat', 'starmap', 'takewhile', 'tee', 'zip_longest']
>>> itertools.imap()
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
itertools.imap()
AttributeError: 'module' object has no attribute 'imap'
4b9b3361

Ответ 1

itertools.imap() находится в Python 2, но не в Python 3.

На самом деле, эта функция была перенесена только на функцию map в Python 3, и если вы хотите использовать старую карту Python 2, вы должны использовать list(map()).

Ответ 2

Если вы хотите что-то, что работает как на Python 3, так и на Python 2, вы можете сделать что-то вроде:

try:
    from itertools import imap
except ImportError:
    # Python 3...
    imap=map

Ответ 3

Вы используете Python 3, поэтому в модуле itertools нет функции imap. Он был удален, потому что глобальная функция map теперь возвращает итераторы.

Ответ 4

Как насчет этого?

imap = lambda *args, **kwargs: list(map(*args, **kwargs))

На самом деле!:)

import itertools
itertools.imap = lambda *args, **kwargs: list(map(*args, **kwargs))