4

有没有办法得到一个产生相反的生成器/迭代器enumerate

from itertools import izip, count

enumerate(I) # -> (indx, v)
izip(I, count()) # -> (v, indx)

没有拉进来itertools

4

3 回答 3

13

你可以用一个简单的生成器表达式来做到这一点:

((v, i) for i, v in enumerate(some_iterable))

这里作为列表理解可以轻松查看输出:

>>> [(v, i) for i, v in enumerate(["A", "B", "C"])]
[('A', 0), ('B', 1), ('C', 2)]
于 2013-04-15T19:38:49.107 回答
12
((v, indx) for indx, v in enumerate(I))

如果你真的想避免itertools。你为什么要?

于 2013-04-15T19:39:06.450 回答
1

我不确定我是否正确理解了您的问题。但这是我的解决方案。基于以下代码:https ://docs.python.org/2/library/functions.html#enumerate

def enumerate_rev(sequence, start=0):
    n = start
    for elem in sequence:
        yield elem,n
        n += 1
于 2015-04-09T12:28:02.073 回答