倒序枚举

4
有没有一种方法可以获得一个生成器/迭代器,它产生enumerate的反向结果?
from itertools import izip, count

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

不使用 itertools 如何实现?

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)]

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

如果你真的想避免使用 itertools,那么为什么呢?


1
因为它看起来太过繁琐,而且我很好奇。 - tacaswell
@tcaswell 导入一些东西并使用已经存在的代码从来不会真正过度。话虽如此,在这种情况下,这可能不是最可读的方法。 - Gareth Latty
@tcaswell 我不确定这个特定的情况,但通常情况下 itertools 比生成器表达式更快。你应该尝试一下并进行比较。 - Elmar Peise
@Lattyware 导入额外的模块(否则不会被导入)来完成可以在没有任何导入的情况下更易读地完成的任务可能不是过度设计,但它不够优雅。感觉有点傻,没看到这个解决方案。 - tacaswell
@Lattyware 我很喜欢使用itertools库,而且在我的编程工作中经常用到它 ;) - tacaswell
显示剩余2条评论

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接