A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2007-July/073797.html below:

[Python-Dev] itertools addition: getitem()

[Python-Dev] itertools addition: getitem()Raymond Hettinger python at rcn.com
Mon Jul 9 00:40:17 CEST 2007
[Walter Dörwald]
> I'd like to propose the following addition to itertools: A function
> itertools.getitem() which is basically equivalent to the following
> python code:
>
> _default = object()
>
> def getitem(iterable, index, default=_default):
>    try:
>       return list(iterable)[index]
>    except IndexError:
>       if default is _default:
>          raise
>       return default
>
> but without materializing the complete list. Negative indexes are
> supported too (this requires additional temporary storage for abs(index)
> objects).

Why not use the existing islice() function?

   x = list(islice(iterable, i, i+1)) or default

Also, as a practical matter, I think it is a bad idea to introduce
__getitem__ style access to itertools because the starting point
moves with each consecutive access:

    # access items 0, 2, 5, 9, 14, 20, ...
    for i in range(10):
        print getitem(iterable, i)

Worse, this behavior changes depending on whether the iterable
is re-iterable (a string would yield consecutive items while a
generator would skip around as shown above).

Besides being a bug factory, I think the getitem proposal would
tend to steer people down the wrong road, away from more
natural solutions to problems involving iterators.  A basic step
in learning the language is to differentiate between sequences
and general iterators -- we should not conflate the two.


Raymond
More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4