imap vs map
mk
mrkafk at gmail.com
Fri Mar 5 14:55:14 EST 2010
Hello everyone,
I re-wrote more "slowly" an example at the end of
http://wordaligned.org/articles/essential-python-reading-list
This example finds anagrams in the text file.
====
from itertools import groupby, imap
from operator import itemgetter
from string import ascii_lowercase, ascii_uppercase, punctuation,
maketrans, translate
data = open(r"c:\temp\words.txt", "rt").read()
trtable = maketrans(ascii_uppercase, ascii_lowercase)
words = translate(data, trtable, deletions = punctuation)
words = list(set(words.split()))
sw = sorted(words, key=sorted)
gb = groupby(sw, sorted)
print map(list, imap(itemgetter(1), gb))
===
words.txt:
===
Word Aligned
three
space sensitive programming
Feed Logo tins
Essential Python post Reading List
stop course there
times isnt
capes
===
Now, when I execute above, it works:
[['capes', 'space'], ['aligned'], ['reading'], ['essential'],
['programming'], ['course'], ['feed'], ['word'], ['there', 'three'],
['sensitive'], ['times'], ['logo'], ['python'], ['list'], ['isnt',
'tins'], ['stop', 'post']]
However, when I change the last line to:
print map(list, map(itemgetter(1), gb))
It stops working:
[[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], ['post']]
Why? I was under impression that the only difference between map and
imap is that imap returns iterator allowing to produce a list, while map
returns equivalent list?
Regards,
mk
More information about the Python-list
mailing list