2015-05-16 19 views
17

Tôi có một vấn đề mà tôi muốn giải quyết với itertools.imap(). Tuy nhiên, sau khi tôi nhập khẩu các itertools trong trình bao IDLE và được gọi là itertools.imap(), trình bao IDLE đã nói với tôi rằng các itertools không có thuộc tính imap. Có chuyện gì vậy?Tôi không thể tìm thấy imap() trong itertools trong Python

>>> 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' 
+0

Bạn cũng có thể xem [itertools.starmap] (https://docs.python.org/3.6/library/itertools.html#itertools.starmap) trong pyhton3. –

Trả lời

19

itertools.imap() là bằng Python 2, nhưng không phải bằng Python 3.

Trên thực tế, chức năng đó đã được chuyển đến chỉ là map hàm trong Python 3 và nếu bạn muốn sử dụng bản đồ cũ Python 2, bạn phải sử dụng list(map()) .

+1

cảm ơn bạn thân, tôi cũng đang cố gắng nhập tích lũy nhưng không hoạt động. Vấn đề là python2.x, Bây giờ chuyển sang python3.X nó bắt đầu hoạt động – Athar

6

Bạn đang sử dụng Python 3, do đó không có hàm imap trong mô-đun itertools. Nó đã bị xóa, vì chức năng toàn cầu map hiện trả về các trình lặp.

8

Nếu bạn muốn một cái gì đó mà làm việc trong cả hai Python 3 và Python 2, bạn có thể làm điều gì đó như:

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

Làm thế nào về điều này?

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

Thực tế !! :)

import itertools 
itertools.imap = lambda *args, **kwargs: list(map(*args, **kwargs)) 
Các vấn đề liên quan