diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index 9a5cb8be37d3496..6205d27335ffe28 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -504,24 +504,20 @@ loops that truncate the stream. # islice('ABCDEFG', 2, None) → C D E F G # islice('ABCDEFG', 0, None, 2) → A C E G s = slice(*args) - start, stop, step = s.start or 0, s.stop or sys.maxsize, s.step or 1 - it = iter(range(start, stop, step)) - try: - nexti = next(it) - except StopIteration: - # Consume *iterable* up to the *start* position. - for i, element in zip(range(start), iterable): - pass + start = s.start if s.start is not None else 0 + stop = s.stop + step = s.step if s.step is not None else 1 + it = iter(iterable) + for _ in zip(range(start), it): + # Consume up to *start* position + pass + if stop is not None and stop <= start: return - try: - for i, element in enumerate(iterable): - if i == nexti: - yield element - nexti = next(it) - except StopIteration: - # Consume to *stop*. - for i, element in zip(range(i + 1, stop), iterable): - pass + for i, element in enumerate(it, start): + if (i - start) % step == 0: + yield element + if stop is not None and i + 1 >= stop: + return .. function:: pairwise(iterable)