为什么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
被抛出。
希望一切都清楚。
我有一个代码:
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
被抛出。
希望一切都清楚。