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

时间:2014-06-18 02:04:36

标签: python python-2.7

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

for i in range(len(mylist)):
    print i, mylist[i]

相反,它表示最好这样做:

for (i, item) in enumerate(mylist):
    print i, item

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

1 个答案:

答案 0 :(得分: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

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