Paul Rubin wrote: > > I think you need to use map(None,...) which would not drop anything, > > just None filled. Though you don't have a relatively lazy version as > > imap(None,...) doesn't behave like map but a bit like zip. > > I don't understand what you mean by this? None is not callable.
zip([1,2,3],[4,5]) gives [(1,4),(2,5)] map(None,[1,2,3],[4,5]) gives [(1,4),(2,5),(3,None)] So the result of map() can be filtered out for special processing. Of course, your empty/sentinel filled version is doing more or less the same thing. > > How about this (untested): > > def myzip(iterlist): > """return zip of smaller and smaller list of iterables as the > individual iterators run out""" > sentinel = object() # unique sentinel > def sentinel_append(iterable): > return itertools.chain(iterable, itertools.repeat(sentinel)) > for i in itertools.izip(map(sentinel_append, iterlist)): > r = [x for x in i.next() if x is not sentinel] > if r: yield r > else: break -- http://mail.python.org/mailman/listinfo/python-list