【发布时间】:2021-03-14 13:22:55
【问题描述】:
我的代码是:
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: 列表索引超出范围
在这一行:if list[0] > list[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)}"
【问题讨论】:
-
首先:
list是一个非常糟糕的变量名称,因为您覆盖了内置的list。第二:您确定您的列表中至少有两个元素(提示:list[1:2])? -
1- 不要使用
list作为变量名,因为它是保留字。 2-不要分配list[0], list[1] = list[1], list[0]。这可能无法如您所愿。 3-您正在返回my_sort([1:2]),这导致了您的问题。您需要返回0:2。 -
在您的
for _ in list:行之前执行print(list)并与我们分享输出 -
你能解释一下这个函数应该做什么吗?
-
@Matthias 递归冒泡排序