为什么我们在 python 的 for 循环中使用 range(len)?

新手上路,请多包涵

我已经开始学习python,现在正在学习python for loop。我正在使用在线资源来学习 python。但我对 for 循环知之甚少。

的输出

list = ["geeks", "for", "geeks"]
for index in range(len(list)):
    print (list[index])

list = ["geeks", "for", "geeks"]
for i in list:
    print(i)

相同那么为什么要使用 range(len) 方法?

提前致谢。

原文由 Alex44 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

对于这种简单的情况, for ind in range(len(sequence)) 通常被认为是反模式。但是,在某些情况下使用索引很有用,例如当您需要分配回列表时:

 for ind in range(len(lst)):
    elem = lst[ind]
    # ... Do some processing
    lst[ind] = processed_elem

即使在那种情况下, range(len(...)) 也可以用 enumerate 更好地表达:

 for ind, elem in enumerate(lst):
    # ... Do some processing
    lst[ind] = processed_elem

此外,正如 评论 中已经指出的那样,建议避免与内置函数冲突的变量名称,例如 list

原文由 user4815162342 发布,翻译遵循 CC BY-SA 4.0 许可协议

虽然后者是明确的方式,只要它符合您的需求,因为它清晰且 pythonic,但在某些情况下您确实需要元素的索引。

一个示例是排序算法,例如此处的 BubbleSort ( src ):

 def bubbleSort(arr):
    n = len(arr)

    # Traverse through all array elements
    for i in range(n):

        # Last i elements are already in place
        for j in range(0, n-i-1):

            # traverse the array from 0 to n-i-1
            # Swap if the element found is greater
            # than the next element
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]

如果排序顺序不正确,顺序元素的列表索引用于交换它们在列表中的位置,而列表中的位置是 for elem in arr 循环中元素的纯值有任何联系了。因此,在这种情况下,您将无法使用 range 而不是列表的 len 或类似的,因此根据定义,这不是非 pythonic 的。

最后但同样重要的是,如果您同时需要索引和值,那么一个很好的组合是 Python 的 enumerate

 for index, value in enumerate(arr):
     print(index, value)

尽管可以在上面的 BubbleSort 示例中使用它,但您会开始混合使用 value 变量和 arr[index] 表达式,这对于代码的可读性来说不是一个好主意。因此,在这里,使用一种构造还是另一种构造是否有意义,在很大程度上也取决于具体情况,没有明确的选择。

原文由 Jeronimo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题