为什么“for i in range(len(arr))”被认为是非Pythonic?

Rob*_*bin 5 python for-loop enumerate range

编辑:我想澄清一下,我在这里询问明确需要索引的情况。我知道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)),或者这实际上是否只是取决于个人喜好。

che*_*ner 6

直接迭代列表更简单。

for x in some_list:
    print(x)
Run Code Online (Sandbox Code Playgroud)

相对

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

如果您确实需要索引,则可以使用enumerate(即使您不关心该索引值,尽管这种用例很少见):

indices_of_positive = [i for i, x in enumerate(some_list) if x > 0]
Run Code Online (Sandbox Code Playgroud)

相对

indices_of_positive = [i for i in range(len(some_list)) if some_list[i] > 0]
Run Code Online (Sandbox Code Playgroud)

请注意,enumerate不需要迭代来支持长度协议。