首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pythonic: python for循环中的range vs enumerate

Pythonic: python for循环中的range vs enumerate
EN

Stack Overflow用户
提问于 2014-06-11 05:01:53
回答 1查看 21.6K关注 0票数 23

你能告诉我为什么当我循环遍历列表时需要索引和值时,它被认为是“非pythonic”的:

代码语言:javascript
复制
a = [1,2,3]
for i in range(len(a)):
  # i is the idx
  # a[i] is the value

而是建议使用

代码语言:javascript
复制
for idx, val in enumerate(a):
  print idx, val

谁定义了“蟒蛇”?为什么后者更好?我的意思是,它在可读性方面也好不到哪里去,不是吗?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-11 05:04:48

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

此外,使用enumerate()可以使用任何可迭代的,而range(len())只能使用可计数的、可索引的对象。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24150762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档