我正在为Grokking算法书SelectionSort中的 for range()循环而苦恼
def findthesmallest(arr):
# suppose that the left list is sorted
min = arr[0]
min_index = 0
for i in range(len(arr)):
if arr[i] < min:
min = arr[i]
min_index = i
return min_index
def selectionsort(arr):
new_arr = []
# For each i+= 1, n-=1
for i in range (len(arr)):
min_index = findthesmallest(arr)
# Add item to new_arr and update the arr
new_arr.append(arr.pop(min_index))
return new_arr
print (selectionsort([5, 3, 4, 8, 10]))
谢谢!
答案 0 :(得分:0)
如果您阅读the documentation about for
,将会看到
表达式列表只计算一次
这意味着range(len(arr))
在第一次迭代之前将被评估一次,然后不再进行评估。这意味着您对arr
所做的更改将不会在以后的循环迭代中被注意到。
您需要其他方式来迭代arr
,也许是while
循环。或添加检查以确保i
没有超出范围。