首先想到的是:
>>> l = list('abcdef')
>>> for i in range(len(l)-1, -1, -1):
... item = l[i]
... print(i, item)
...
5 f
4 e
3 d
2 c
1 b
0 a
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方法:
>>> l
['a', 'b', 'c', 'd', 'e', 'f']
>>> for i,ch in reversed(enumerate(l)):
... print(i,ch)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'enumerate' object is not reversible
Run Code Online (Sandbox Code Playgroud)
但显然“枚举”对象是不可逆的。我可以用以下方法欺骗它:
>>> for i,ch in reversed(list(enumerate(l))):
... print(i,ch)
...
5 f
4 e
3 d
2 c
1 b
0 a
Run Code Online (Sandbox Code Playgroud)
但这感觉不对 - 这有点麻烦。有一个更好的方法吗?也许一些隐藏的“inverse_enumerate”是像集合或迭代工具这样的库?
谢谢。
这可能不是最 Pythonic 的方法,但您可以重用文档提供的代码来enumerate重新实现您自己的反向enumerate.
该文档提供了以下代码:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
Run Code Online (Sandbox Code Playgroud)
这是一个函数的提案renumerate,该函数以相反的顺序生成序列的元素:
def renumerate(sequence, start=None):
n = start
if start is None:
n = len(sequence) - 1
for elem in sequence[::-1]:
yield n, elem
n -= 1
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不适用于生成器,因为它需要知道序列的长度。
| 归档时间: |
|
| 查看次数: |
2074 次 |
| 最近记录: |