我已经开始学习python,现在学习python for loop。我正在使用在线资源来学习python。但是我很少,但是对于循环感到困惑。
的输出
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)方法呢?
谢谢。
答案 0 :(得分:4)
对于这种简单情况,for ind in range(len(sequence))
通常被认为是反模式。不过,在某些情况下,拥有索引很有用,例如,当您需要分配回列表时:
for ind in range(len(lst)):
elem = lst[ind]
# ... Do some processing
lst[ind] = processed_elem
即使在这种情况下,最好避免使用enumerate
来range(len(...))
:
for ind, elem in enumerate(lst):
# ... Do some processing
lst[ind] = processed_elem
另外,如comment中已指出的,避免使用与内置变量冲突的变量名,例如list
。
答案 1 :(得分:1)
尽管后者显然是适合您的需求的方式,因为它清晰明了且具有Python风格,但在某些情况下,您确实需要元素的索引。
一个示例是排序算法,例如此处的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
或类似名称,所以从定义上讲,这并非非Python的。
最后但并非最不重要的一个好组合,如果您同时需要索引和值,则为Python的enumerate
。
for index, value in enumerate(arr):
print(index, value)
尽管在上面的BubbleSort示例中可以使用它,但是您将开始将value
变量与arr[index]
表达式混合使用,这对于代码的可读性不是一个好主意。因此,在这里,使用一种或另一种构造是否合理也很大程度上取决于情况,没有确定的选择。
答案 2 :(得分:0)
您永远不要使用第一个,因为它不是Python语言。使用第二个。如果出于任何原因需要索引,请使用枚举,例如
for index, item in enumerate(some_list):
print(f'Item with index {index} is {item}')
答案 3 :(得分:0)
与其他人一样,我想不出for idx in range(len(x)):
的许多用例。唯一真正想到的是如果您需要在x
循环过程中从for
中删除元素(在这种情况下,如注释中所指出的,您应该倒退),或者由于某种原因,您想执行与len(x)
相等的循环次数,而与x
上的操作无关。
但是,是的,如果要遍历x,通常不要使用for _ in range(len(x)):
。