Python仅枚举反向索引

2024-04-08

我正在尝试反转给出的索引enumerate同时保留被枚举列表的原始顺序。

假设我有以下内容:

>> range(5)
[0, 1, 2, 3, 4]

如果我列举这一点,我会得到以下结果:

>> list(enumerate(range(5)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

但是我想反转 enumerate 提供的索引,以便我得到:

[(4, 0), (3, 1), (2, 2), (1, 3), (0, 4)]

到目前为止我有以下代码:

reversed(list(enumerate(reversed(range(5)))))

我只是想知道是否有更简洁的方法来做到这一点?


使用 zip 代替反向范围怎么样?

>>> zip(range(9, -1, -1), range(10))
[(9, 0), (8, 1), (7, 2), (6, 3), (5, 4), (4, 5), (3, 6), (2, 7), (1, 8), (0, 9)]


>>> def reversedEnumerate(l):
        return zip(range(len(l)-1, -1, -1), l)
>>> reversedEnumerate(range(10))
[(9, 0), (8, 1), (7, 2), (6, 3), (5, 4), (4, 5), (3, 6), (2, 7), (1, 8), (0, 9)]

正如@julienSpronk建议的那样,使用izip也获得发电机xrange:

import itertools
>>> import itertools
>>> def reversedEnumerate(l):
...     return itertools.izip(xrange(len(l)-1, -1, -1), l)
...     
>>> reversedEnumerate(range(10))
<itertools.izip object at 0x03749760>
>>> for i in reversedEnumerate(range(10)):
...     print i
...     
(9, 0)
(8, 1)
(7, 2)
(6, 3)
(5, 4)
(4, 5)
(3, 6)
(2, 7)
(1, 8)
(0, 9)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python仅枚举反向索引 的相关文章

随机推荐