Python

2015-05-16 12 views
17

içinde itertools içinde imap() bulamıyorum Itertools.imap() ile çözmek istediğim bir sorunum var. Ancak, IDLE kabuğundaki itertools'u alıp itertools.imap() olarak adlandırdıktan sonra IDLE kabuğu, itertools'un öznitelik imapının olmadığını söyledi. Neyin yanlış gidiyor? Python'u 3 kullanıyorsunuzPython

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

O [itertools.starmap] (https://docs.python.org/3.6/library/itertools.html#itertools.starmap) pyhton3 içinde bakmak için de ilginç olabilir. –

cevap

19

itertools.imap() Python 2'de, ancak Python içindedir 3.

Aslında, bu fonksiyon Python 3'te sadece map işlev taşındı ve eski Python 2 haritayı kullanmak istiyorsanız, list(map()) kullanmalıdır . Bu nasıl hakkında

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

teşekkürler dostum, biriktirmeyi de denedim ama çalışmıyordu. Sorun python2.x, Şimdi python3.X'e geçti. – Athar

6

nedenle itertools modülünde hiçbir imap işlevi yoktur. Bu kaldırıldı çünkü global işlev map artık yineleyicileri döndürüyor.

8

, gibi bir şey yapabilirim?

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

Aslında! :)

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

: Eğer Python 3 ve Python 2 hem de çalışan bir şey istiyorsanız