I am evaluating a request for an alternate version of itertools.izip() that has a None fill-in feature like the built-in map function:
>>> map(None, 'abc', '12345') # demonstrate map's None fill-in feature [('a', '1'), ('b', '2'), ('c', '3'), (None, '4'), (None, '5')] The movitation is to provide a means for looping over all data elements when the input lengths are unequal. The question of the day is whether that is both a common need and a good approach to real-world problems. The answer to the question can likely be found in results from other programming languages or from real-world Python code that has used map's None fill-in feature. I scanned the docs for Haskell, SML, and Perl and found that the norm for map() and zip() is to truncate to the shortest input or raise an exception for unequal input lengths. I scanned the standard library and found no instances where map's fill-in feature was used. Likewise, I found no examples in all of the code I've ever written. The history of Python's current zip() function serves as another indicator that the proposal is weak. PEP 201 contemplated and rejected the idea as one that likely had unintended consequences. In the years since zip() was introduced in Py2.0, SourceForge has shown no requests for a fill-in version of zip(). My request for readers of comp.lang.python is to search your own code to see if map's None fill-in feature was ever used in real-world code (not toy examples). I'm curious about the context, how it was used, and what alternatives were rejected (i.e. did the fill-in feature improve the code). Also, I'm curious as to whether someone has seen a zip fill-in feature employed to good effect in some other programming language, perhaps LISP or somesuch? Maybe a few real-word code examples and experiences from other languages will shed light on the question of whether lock-step iteration has meaning beyond the length of the shortest matching elements. If ordinal position were considered as a record key, then the proposal equates to a database-style outer join operation (where data elements with unmatched keys are included) and order is significant. Does an outer-join have anything to do with lock-step iteration? Is this a fundamental looping construct or just a theoretical wish-list item? IOW, does Python really need itertools.izip_longest() or would that just become a distracting piece of cruft? Raymond Hettinger P.S. FWIW, the OP's use case involved printing files in multiple columns: for f, g in itertools.izip_longest(file1, file2, fillin_value=''): print '%-20s\t|\t%-20s' % (f.rstrip(), g.rstrip()) The alternative was straight-forward but not as terse: while 1: f = file1.readline() g = file2.readline() if not f and not g: break print '%-20s\t|\t%-20s' % (f.rstrip(), g.rstrip()) -- http://mail.python.org/mailman/listinfo/python-list