你能告诉我为什么当我循环遍历列表时需要索引和值时,它被认为是“非pythonic”的:
a = [1,2,3]
for i in range(len(a)):
# i is the idx
# a[i] is the value而是建议使用
for idx, val in enumerate(a):
print idx, val谁定义了“蟒蛇”?为什么后者更好?我的意思是,它在可读性方面也好不到哪里去,不是吗?
提前感谢
发布于 2014-06-11 05:04:48
首先,第一种方法很难看:要么需要一个单独的变量赋值来获取元素,要么一直使用a[i],这在理论上可能是一个昂贵的操作。假设a是一个数据库游标:当您迭代它(调用a.__iter__)时,对象可以安全地假定您将迭代它的所有项。因此可以一次检索所有或至少多个行。但是,在获得长度时,这样的优化将是愚蠢的,因为您肯定不想仅仅因为想要项目的数量而检索数据。此外,当检索特定项目时,您不能假设其他项目也会被检索。
此外,使用enumerate()可以使用任何可迭代的,而range(len())只能使用可计数的、可索引的对象。
https://stackoverflow.com/questions/24150762
复制相似问题