2013-04-15 65 views
4

有沒有辦法得到一個發電機/迭代器,產生的enumerate相反:「倒退」枚舉

from itertools import izip, count 

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

沒有itertools拉?這裏

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

的列表理解很容易地看到輸出:

回答

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

,如果你真的想避免itertools。你爲什麼?

+1

因爲它似乎有點小題大做,我很好奇 – tacaswell

+0

@tcaswell導入的東西,使用已經存在是從來沒有真正矯枉過正代碼。這就是說,在這種情況下,它可能不是最可讀的方式。 –

+0

@tcaswell我不確定這個特殊情況,但總的來說'itertools'比生成器表達式快。你應該試試看,並進行比較。 –

13

你可以用一個簡單的generator expression做到這一點

>>> [(v, i) for i, v in enumerate(["A", "B", "C"])] 
[('A', 0), ('B', 1), ('C', 2)]