我在Python中的itertools中找不到imap()

时间:2015-05-16 04:03:25

标签: python iterator

我有一个问题,我想用itertools.imap()来解决。但是,在我在IDLE shell中导入itertools并调用itertools.imap()后,IDLE shell告诉我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'

6 个答案:

答案 0 :(得分:31)

itertools.imap()在Python 2中,但不在Python 3中。

实际上,该功能仅移至Python 3中的map功能,如果您想使用旧的Python 2地图,则必须使用list(map())

答案 1 :(得分:13)

如果你想要一些适用于Python 3和Python 2的东西,你可以这样做:

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

答案 2 :(得分:6)

您使用的是Python 3,因此imap模块中没有itertools函数。它已被删除,因为全局函数map现在返回迭代器。

答案 3 :(得分:2)

这个怎么样?

java -jar jenkins.war

事实上!! :)

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

答案 4 :(得分:1)

我喜欢通用Python 2/3代码的python-future idoms,如下所示:

# Works in both Python 2 and 3:
from builtins import map

然后,您必须重构代码,才能在map之前的任何地方使用imap

myiter = map(func, myoldlist)

# `myiter` now has the correct type and is interchangeable with `imap`
assert isinstance(myiter, iter)

你需要为此安装未来才能同时使用2和3:

pip install future

答案 5 :(得分:0)

您可以使用2to3脚本(https://docs.python.org/2/library/2to3.html),该脚本是每个Python安装的一部分,可将您的程序或整个项目从Python 2转换为Python 3。

python <path_to_python_installation>\Tools\scripts\2to3.py -w <your_file>.py

(-w选项将修改写入文件,存储备份)