Hi,

I needed reversed(enumerate(x: list)) in my code, and have discovered that it wound't work. This is disappointing because operation is well defined. It is also well defined for str type, range, and - in principle, but not yet in practice - on dictionary iterators - keys(), values(), items() as dictionaries are ordered now.
It would also be well defined on any user type implementing __iter__, __len__, __reversed__ - think numpy arrays, some pandas dataframes, tensors.

That's plenty of usecases, therefore I guess it would be quite useful to avoid hacky / inefficient solutions like described here: https://code.activestate.com/lists/python-list/706205/.

If deemed useful, I would be interested in implementing this, maybe together with __reversed__ on dict keys, values, items.

Best Regards,
--
Ilya Kamen

----------- 
p.s. 

Sketch of what I am proposing: 

class reversible_enumerate:

def __init__(self, iterable):
self.iterable = iterable
self.ctr = 0

def __iter__(self):
for e in self.iterable:
yield self.ctr, e
self.ctr += 1

def __reversed__(self):
try:
ri = reversed(self.iterable)
except Exception as e:
raise Exception(
"enumerate can only be reversed if iterable to enumerate can be reversed and has defined length."
) from e

try:
l = len(self.iterable)
except Exception as e:
raise Exception(
"enumerate can only be reversed if iterable to enumerate can be reversed and has defined length."
) from e

indexes = range(l-1, -1, -1)
for i, e in zip(indexes, ri):
yield i, e

for i, c in reversed(reversible_enumerate("Hello World")):
print(i, c)

for i, c in reversed(reversible_enumerate([11, 22, 33])):
    print(i, c)