Python 为什么是;对于范围内的i(len(arr))”;被认为是非蟒蛇?
编辑:我想澄清一下,我在这里询问的是明确需要索引的情况。我知道,当不需要时,items中的item的Python 为什么是;对于范围内的i(len(arr))”;被认为是非蟒蛇?,python,for-loop,range,enumerate,Python,For Loop,Range,Enumerate,编辑:我想澄清一下,我在这里询问的是明确需要索引的情况。我知道,当不需要时,items中的item的更好。我有一个长期的习惯,认为列表项是my_list[I]或arr[I]。我发现看到列表和索引的名称挨在一起是非常清楚和有用的。因此,我的问题是,改变我对索引和值的思考方式,以适应enumerate的工作方式,是否有任何好处 正如标题所说。我读过很多答案,说因为I在范围内(len(arr))不好,但没有听到一个好的理由来解释为什么会这样。一个论点是它是“非Pythonic”,但与c风格的版本相比,
更好。我有一个长期的习惯,认为列表项是my_list[I]
或arr[I]
。我发现看到列表和索引的名称挨在一起是非常清楚和有用的。因此,我的问题是,改变我对索引和值的思考方式,以适应enumerate
的工作方式,是否有任何好处
正如标题所说。我读过很多答案,说因为I在范围内(len(arr))
不好,但没有听到一个好的理由来解释为什么会这样。一个论点是它是“非Pythonic”,但与c风格的版本相比,它表面上看起来相当Pythonic
由于enumerate
有一个有时不需要的附加参数,我对其优点感到困惑,因为增加的简单性似乎不能保证。我想了解更多关于为什么我应该避免使用范围内的I(len(arr))
,或者这实际上是否只是个人偏好。直接迭代列表更简单
for x in some_list:
print(x)
对
for i in range(len(some_list)):
print(some_list[i])
indices_of_positive = [i for i in range(len(some_list)) if some_list[i] > 0]
如果确实需要索引,可以使用enumerate
(即使您不关心该索引处的值,但此类用例很少):
对
for i in range(len(some_list)):
print(some_list[i])
indices_of_positive = [i for i in range(len(some_list)) if some_list[i] > 0]
请注意,
enumerate
不需要iterable来支持长度协议。因为您很少需要它。您多久需要一次项目的索引?通常,您要么只需要项目,在这种情况下,用于项目中的项目:
,要么您还(但不仅)需要索引,在这种情况下,用于索引,枚举中的项目(项目):
。我也很想知道这一点@jonrsharpe,我同意如果您使用索引来访问循环中的数组,那么enumerate是一个更好的选择。但是如果您只需要索引,那么它是否仍然是“坏的”?我编辑了这个问题,以排除适用于items中item的,因为我很清楚这一点。到目前为止,我已经将“enumerate不需要iterable来支持长度协议”作为一个可能的优势。还有吗?更直接。当使用索引的唯一原因是获取列表中的一项时,为什么要迭代索引,而您可以通过迭代直接获取该项?