R
rurpy
Raymond Hettinger said:[[email protected]][raymond]How well correlated in the use of map()-with-fill with the
(need for) the use of zip/izip-with-fill?[[email protected]]Close to 100%. A non-iterator version of izip_longest() is exactly
equivalent to map(None, it1, it2, ...).
If I use map()
I can trivially determine the arguments lengths and deal with
unequal length before map(). With iterators that is more
difficult. So I can imagine many cases where izip might
be applicable but map not, and a lack of map use cases
not representative of izip use cases.
You don't seem to understand what map() does. There is no need to
deal with unequal argument lengths before map(); it does the work for
you. It handles iterator inputs the same way. Meditate on this:
def izip_longest(*args):
return iter(map(None, *args))
Modulo arbitrary fill values and lazily evaluated inputs, the semantics
are exactly what is being requested. Ergo, lack of use cases for
map(None,it1,it2) means that izip_longest(it1,it2) isn't needed.
"lazily evaluated inputs" is exactly what I was pointing
out and what make your izip_longest() above not the
same as map(None,...), and hence, your conclusion
invalid. Specifically....
def izip_longest(*args):
return iter(map(None, *args))
f1 = file ("test.dat")
f2 = file ("test.dat")
it = izip2 (f1, f2)
while 1:
h1, h2 = it.next ()
print h1.strip(), h2
izip2() in the above code is a "real" izip_longest
based on a version posted in this thread.
3347 3347test.py
-3487 -3487
2011 2011
239 239
....
Replace izip2 in the above code with your izip_longest
[wait, wait, wait,... after a few minutes type ^c, nothingtest.py
happens, close window].
I don't think your izip_longest is at all equivalent to
the proposed izip, and thus there may well be uses
cases for izip that aren't represented by imap(None,...)
use cases, which is what I said. That is, I might have
a use case for izip which I would never even consider
map() for.