有没有办法将这个生成器函数转换成一个相对简单的生成器理解? (以下对我有用,我只想了解可能的选项)
def annotate(x):
n = 0
for item in x:
yield(item,n)
n = n + 1
使用示例:
>>> for line in annotate([3,4,5]):
... print line
...
(3, 0)
(4, 1)
(5, 2)
答案 0 :(得分:5)
您可以使用enumerate
:
comp = ((y,x) for x,y in enumerate(iterable))
示范:
>>> annotated = ((y,x) for x,y in enumerate(range(1,4)))
>>> for line in annotated: print line
...
(1, 0)
(2, 1)
(3, 2)
虽然,通常你只使用enumerate
而只是以相反的顺序打开包装。 :^)