为什么使用range()来同时提供索引和元素是不好的?

Bel*_*gor 3 python python-2.7

我正在阅读一些在线Python的东西,还有一些有趣的东西出现了.基本上它说不要这样做:

for i in range(len(mylist)):
    print i, mylist[i]
Run Code Online (Sandbox Code Playgroud)

相反,它说这样做更好:

for (i, item) in enumerate(mylist):
    print i, item
Run Code Online (Sandbox Code Playgroud)

通常我会选择第一个选项,但我没有看到这样做有任何潜在的风险.为什么第一个代码不好?与后者相比,第一代代码是否会对前面的代码行产生某种影响?

ars*_*jii 5

除了可读性因素之外,第二个片段适用于任何可迭代,而第一个片段仅适用于可以索引的对象(例如列表).例如,假设您使用的是集合:

>>> myset = {1,2,3}
>>>
>>> enumerate(myset)  # works
<enumerate object at 0x2c9440>
>>>
>>> myset[0]          # doesn't work
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
Run Code Online (Sandbox Code Playgroud)

这为代码增加了灵活性,如果您选择切换数据结构,可以让您的生活更轻松.