Ответ 1
itertools.imap()
находится в Python 2, но не в Python 3.
На самом деле, эта функция была перенесена только на функцию map
в Python 3, и если вы хотите использовать старую карту Python 2, вы должны использовать list(map())
.
У меня есть проблема, которую я хочу решить с помощью 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'
itertools.imap()
находится в Python 2, но не в Python 3.
На самом деле, эта функция была перенесена только на функцию map
в Python 3, и если вы хотите использовать старую карту Python 2, вы должны использовать list(map())
.
Если вы хотите что-то, что работает как на Python 3, так и на Python 2, вы можете сделать что-то вроде:
try:
from itertools import imap
except ImportError:
# Python 3...
imap=map
Вы используете Python 3, поэтому в модуле itertools
нет функции imap
. Он был удален, потому что глобальная функция map
теперь возвращает итераторы.
Как насчет этого?
imap = lambda *args, **kwargs: list(map(*args, **kwargs))
На самом деле!:)
import itertools
itertools.imap = lambda *args, **kwargs: list(map(*args, **kwargs))