'向后'列举

时间:2013-04-15 19:35:58

标签: python

有没有办法让一个生成器/迭代器产生enumerate的反转:

from itertools import izip, count

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

没有拉入itertools

3 个答案:

答案 0 :(得分:13)

您可以使用简单的generator expression

执行此操作
((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)]

答案 1 :(得分:11)

((v, indx) for indx, v in enumerate(I))

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

答案 2 :(得分: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