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