An "adapter", superset of an iterator

Thomas Passin list1 at tompassin.net
Wed May 3 16:24:10 EDT 2023


On 5/3/2023 3:46 PM, Oscar Benjamin wrote:
> On Wed, 3 May 2023 at 18:52, Thomas Passin <list1 at tompassin.net> wrote:
>>
>> On 5/3/2023 5:45 AM, fedor tryfanau wrote:
>>> I've been using python as a tool to solve competitive programming problems
>>> for a while now and I've noticed a feature, python would benefit from
>>> having.
>>> Consider "reversed(enumerate(a))". This is a perfectly readable code,
>>> except it's wrong in the current version of python. That's because
>>> enumerate returns an iterator, but reversed can take only a sequence type.
>>
>> Depending on what you want to give and receive, enumerate(reversed(a))
>> will do the job here.  Otherwise list() or tuple() can achieve some of
>> the same things.
> 
> I don't think that is equivalent to the intended behaviour:
> 
> reversed(enumerate(a)) # zip(reversed(range(len(a))), reversed(a))
> enumerate(reversed(a)) # zip(range(len(a)), reversed(a))

I don't think we know the intended behavior here. The OP did not say 
what type of object should be returned.  He only wanted an expression 
that would run.  Apparently the result should be an enumeration of 
variable "a" but with "a" reversed.  Is "a" supposed to be a sequence? 
An iterator?  Presumably the result was expected to be an enumeration, 
which is to say an iterator, and enumerate(reversed(a)) would return an 
iterator.

Perhaps the OP wants all methods/functions that operate on either 
sequences or iterators should be generalized to be able to operate on 
both. That doesn't sound unreasonable on the face of it, but I think 
that deeper study would uncover a lot of hard questions. There will also 
be a lot of edge cases to handle and get right.

> In principle for a sequence input enumerate(a) could be something that
> behaves like a sequence and therefore could be reiterated or reversed
> etc. The enumerate(a).__reversed__ method could then delegate to
> a.__reversed__ and a.__len__ if they exist. This could be confusing
> though because the possible behaviour of enumerate(a) would be
> different depending on the type of a.
> 
> --
> Oscar



More information about the Python-list mailing list