2015-05-16 22 views
17

Mam problem, który chcę rozwiązać za pomocą itertools.imap(). Jednak po zaimportowaniu itertools w powłoce IDLE i nazwie itertools.imap(), shell IDLE powiedział mi, że itertools nie ma atrybutu imap. Co idzie źle?Nie mogę znaleźć imap() w itertools w Pythonie

>>> 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

To może być interesująca również przyjrzeć [itertools.starmap] (https://docs.python.org/3.6/library/itertools.html#itertools.starmap) w pyhton3. –

Odpowiedz

19

itertools.imap() jest w Pythonie 2, ale nie w Pythonie 3.

Faktycznie, że funkcja została przeniesiona do właśnie funkcja map w Pythonie 3, a jeśli chcesz używać starego Python 2 mapy, należy użyć list(map()) .

+1

dziękuję kolego, próbowałem również importować akumulować, ale nie działa. Problem polegał na tym, że python2.x, Now przełączony na python3.X zaczął działać – Athar

6

Używasz Python 3, dlatego nie ma imap funkcja w module itertools. Zostało ono usunięte, ponieważ funkcja globalna map zwraca teraz iteratory.

8

Jeśli chcesz coś, co działa zarówno w Pythonie Python 3 i 2, można zrobić coś takiego:

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

Jak ten temat?

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

W rzeczywistości !! :)

import itertools 
itertools.imap = lambda *args, **kwargs: list(map(*args, **kwargs)) 
Powiązane problemy