为什么将“ for i in rangelenarr”视为非Pythonic?

问题描述

编辑:我想澄清一下,我在这里询问明确需要索引的情况。我知道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不需要迭代器即可支持长度协议。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...