From 2f08df36900f4a2799e7f0e92178e314180ee3bc Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 10 Oct 2010 05:54:39 +0000 Subject: [PATCH] Issue #10029: Fix sample code in the docs for zip(). --- Doc/library/functions.rst | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 97f2a38d41..42e4269ace 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 -- 2.49.0