问题描述
编辑:我想澄清一下,我在这里询问明确需要索引的情况。我知道for item in items
在不需要时会更好。我有一个习惯将列表项视为my_list[i]
或arr[i]
。我发现列表的名称和索引彼此相邻非常清晰和有用。因此,我的问题确实是,改变我对索引和值的看法以适应enumerate
的工作方式是否有任何优势。
如标题所述。我已经读过很多答案,说for i in range(len(arr))
是不好的,但没有听到关于 为什么 的充分理由。一种说法是它是“非Pythonic的”,但与c风格的版本相比,从表面上看,它看起来很像Pythonic。
由于enumerate
有时不需要使用其他参数,因此我对优点感到困惑,因为似乎无法保证增加的简便性。我想听听更多关于为什么我应该避免使用for i in range(len(arr))
的信息,或者实际上是否仅出于个人喜好。
解决方法
直接遍历列表更简单。
for x in some_list:
print(x)
与
for i in range(len(some_list)):
print(some_list[i])
如果确实需要索引,则可以使用enumerate
(即使您并不在意该索引的值 ,尽管这种用例很少见):>
indices_of_positive = [i for i,x in enumerate(some_list) if x > 0]
与
indices_of_positive = [i for i in range(len(some_list)) if some_list[i] > 0]
请注意,enumerate
不需要迭代器即可支持长度协议。