Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么是;对于范围内的i(len(arr))”;被认为是非蟒蛇?_Python_For Loop_Range_Enumerate - Fatal编程技术网

Python 为什么是;对于范围内的i(len(arr))”;被认为是非蟒蛇?

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风格的版本相比,

编辑:我想澄清一下,我在这里询问的是明确需要索引的情况。我知道,当不需要时,items中的item的
更好。我有一个长期的习惯,认为列表项是
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来支持长度协议”作为一个可能的优势。还有吗?更直接。当使用索引的唯一原因是获取列表中的一项时,为什么要迭代索引,而您可以通过迭代直接获取该项?