我查看过与此问题相同的所有其他帖子。我可能错了,但我看到的唯一可能有帮助的解决方案是列表推导,但我不确定在这种情况下列表推导是否可行。我确保我的变量i实际上是索引而不是值。我可能错了,但我不明白为什么这段代码不适合我。我在Windows 10 64位戴尔笔记本电脑上使用Python 3.6.1。以下是代码并提前感谢您的帮助。
def swap(a, b):
return b, a
def bubble_sort(array):
swaps = 0
passes = 0
for i in range(len(array)):
if array[i] > array[i + 1]:
array[i], array[i + 1] = swap(array[i], array[i + 1])
swaps += 1
passes += 1
print(passes, swaps)
return array
array = [3, 1, 4, 1, 5, 9, 2, 6]
print("Array before sort is " + str(array))
array = bubble_sort(array)
print("Array after sort is " + str(array))
我的主要目标是找出导致此错误的原因,我希望能够成功运行的解决方案没有任何错误。请尽量不提供只会导致更多错误的解决方案。感谢您的帮助。
答案 0 :(得分:0)
此语句很可能导致错误if array[i] > array[i + 1]
,因为当i
到达len(array)
时,即8,在这种情况下,您的逻辑正在尝试访问array[7] > array [7 +1 ]
,但是array [8]不存在,因此它会抛出索引超出范围的错误。