为什么for循环在冒泡排序中会报错?

Why does the for loop give an error in bubble sort?

我有一个代码:

l = [5, 8, 1, 3, 2]

still_swapping = True

while still_swapping:
    still_swapping = False
    for i in range(len(l)):
        print(l[i], i)
        if l[i] > l[i+1]:
            l[i], l[i+1] = l[i+1], l[i]
            still_swapping = True
print(l)

而且,我的输出是:

    if l[i] > l[i+1]:
IndexError: list index out of range

我不明白为什么它超出范围。你们能帮帮我吗?

IndexError: list index out of range 当你试图访问一个索引不在数组可用索引范围内的元素时抛出。

例如,假设您有 10 桶水果,所有桶都依次标记为 0,1,2.....,9。所以你有每个桶的特定标识号。因此,最后一个桶的索引号为 total buckets-1,因为我们将它们标记为从 0 开始,而不是 1。

所以如果你说带上最后一个桶,索引号将永远是total buckets-1。同样,如果您尝试访问索引号与总桶数相同的桶,那将是一个无效查询,因为您没有索引号与桶总数相​​同的桶,在我的示例中为 10。现在看:

for i in range(len(l)):

在这里,你从 0 循环到 len(l) - 1 (这就是 range(int) 的工作方式),总共 l 次,这是数组的长度.现在,当您尝试处理最后一个索引号时,即 len(l)-1,那么在这一行中:

if l[i] > l[i+1]:

您正在尝试访问条件右侧的索引 len(l),发生与我的示例相同的情况,您正在访问超出范围的桶号 10,因此 IndexError: list index out of range 被抛出。

希望一切都清楚。