[Python-3000] have zip() raise exception for sequences of different lengths (original) (raw)

Jim Jewett jimjjewett at gmail.com
Thu Aug 31 17:38:59 CEST 2006


On 8/30/06, Barry Warsaw <barry at python.org> wrote:

On Aug 30, 2006, at 5:57 PM, Guido van Rossum wrote:

> Perhaps a compromise could be to add a keyword parameter to request > such an exception? (We could even add three options: truncate, pad, > error, with truncate being the default, and pad being the old map() > and filter() behavior.)

What about a keyword argument called 'filler' which can be an n-sized sequence or a callable.

How about a keyword-only argument called finish which is a callable to deal with the problem? When any sequence is exhausted, its position is filled with StopIteration, and then finish(result) is returned.

For example,

>>> g=zip("abc", (1,2))

The third call to g.next() will return the result of finish('c', StopIteration)

def finish_truncate(*args): # The default, like today raise StopIteration

def finish_error(*args): if all(v is StopIteration for v in args): raise StopIteration raise ValueError("Mismatched sequence length %s" % args)

def finish_padNone(*args): if all(v is StopIteration for v in args): raise StopIteration return tuple((v if v is not StopIteration else None) for v in args)

-jJ



More information about the Python-3000 mailing list