From: Raymond Hettinger Date: Sun, 10 Oct 2010 05:54:39 +0000 (+0000) Subject: Issue #10029: Fix sample code in the docs for zip(). X-Git-Tag: v3.2a3~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2f08df36900f4a2799e7f0e92178e314180ee3bc;p=thirdparty%2FPython%2Fcpython.git Issue #10029: Fix sample code in the docs for zip(). --- diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 97f2a38d41ae..42e4269ace40 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -1235,11 +1235,18 @@ are always available. They are listed here in alphabetical order. iterable argument, it returns an iterator of 1-tuples. With no arguments, it returns an empty iterator. Equivalent to:: - def zip(*iterables): - # zip('ABCD', 'xy') --> Ax By - iterables = map(iter, iterables) - while iterables: - yield tuple(map(next, iterables)) + def zip(*iterables): + # zip('ABCD', 'xy') --> Ax By + sentinel = object() + iterables = [iter(it) for it in iterables] + while iterables: + result = [] + for it in iterables: + elem = next(it, sentinel) + if elem is sentinel: + return + result.append(elem) + yield tuple(result) The left-to-right evaluation order of the iterables is guaranteed. This makes possible an idiom for clustering a data series into n-length groups