Pythonic : range vs enumerate in python for loop

标签 python for-loop coding-style

<分区>

你能告诉我为什么当我需要索引和循环遍历列表时的值并使用时它被认为是“非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

谁定义了“pythonic”,为什么后者更好?我的意思是它在可读性方面并没有好多少,对吧!?

提前致谢

最佳答案

首先,第一种方法很丑陋:您要么需要一个单独的变量赋值来获取元素,要么一直使用 a[i],这 理论上是一个昂贵的操作。想象一下 a 是一个数据库游标:当您迭代它时(a.__iter__ 被调用)对象可以安全地假设您将迭代它的所有项目。因此可以一次检索所有或至少多行。当获得长度时,这样的优化将是愚蠢的,因为你肯定不想仅仅因为你想要项目的数量而检索数据。此外,在检索特定项目时,您不能假设其他项目也会被检索。

此外,使用 enumerate() 适用于 any iterablerange(len()) 仅适用于 countable, indexable 对象。

关于Pythonic : range vs enumerate in python for loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24150762/

相关文章:

php - for循环巨大的数字

java - 我如何设计我的类(class)?

python - 子模块上出现 ModuleNotFoundError

python - 具有自定义 API View 的 Django 休息框架分页

android - 在ubuntu14.04中找不到NDK_ROOT cocos2d-x

java - 在 Java 的 for 循环中跳过数字。我怎样才能使它更干净?

php - 数值前面的 0 未被去除

Java 约定 : use getters/setters WITHIN the class?

vb.net - 使用 Nothing 实例化变量,然后分配一个 New 对象实例

python - 类方法中的默认参数不是唯一的python