首页 > 解决方案 > python:列表索引超出范围

问题描述

我的代码是:

def my_sort(list):
    for _ in list:
        if list[0] > list[1]:
            list[0], list[1] = list[1], list[0]
    return my_sort(list[1:2])

但我不断收到此错误:IndexError: list index out of range

在这一行:如果列表 [0] > 列表 [1]:

这是我正在使用的测试代码:

   def test_my_sort():
lst_test = random.choices(range(-99, 100), k=6)
lst_copy = lst_test.copy()
lst_output = my_sort(lst_test)

assert lst_copy == lst_test, "Fout: my_sort(lst) verandert de inhoud van lijst lst"
assert lst_output == sorted(lst_test), \
    f"Fout: my_sort({lst_test}) geeft {lst_output} in plaats van {sorted(lst_test)}"

标签: pythonindexing

解决方案


您的问题源于这一行:

return my_sort(list[1:2])

在 python 中,我们0从而不是从开始索引1。所以这转化为“索引 1 到 2”。您“停止”的索引不包括在内,因此您的语法变为“给我索引 1”。正确的解决方案是:

return my_sort(list[0:2])

或者更好:

return my_sort(list[:2])

因为这里的空意味着从头开始。

编辑:我还没有解决你的递归问题,我只解决了你的列表索引问题。但是,请看一下递归冒泡排序的解决方案


推荐阅读