列表索引超出范围Python尽管研究相同

时间:2017-04-13 02:30:04

标签: python

我查看过与此问题相同的所有其他帖子。我可能错了,但我看到的唯一可能有帮助的解决方案是列表推导,但我不确定在这种情况下列表推导是否可行。我确保我的变量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))

我的主要目标是找出导致此错误的原因,我希望能够成功运行的解决方案没有任何错误。请尽量不提供只会导致更多错误的解决方案。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

此语句很可能导致错误if array[i] > array[i + 1],因为当i到达len(array)时,即8,在这种情况下,您的逻辑正在尝试访问array[7] > array [7 +1 ],但是array [8]不存在,因此它会抛出索引超出范围的错误。