python - 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)}"
解决方案
您的问题源于这一行:
return my_sort(list[1:2])
在 python 中,我们0
从而不是从开始索引1
。所以这转化为“索引 1 到 2”。您“停止”的索引不包括在内,因此您的语法变为“给我索引 1”。正确的解决方案是:
return my_sort(list[0:2])
或者更好:
return my_sort(list[:2])
因为这里的空意味着从头开始。
编辑:我还没有解决你的递归问题,我只解决了你的列表索引问题。但是,请看一下递归冒泡排序的解决方案。
推荐阅读
- c# - 使用 filehelpers 按列名解析 CSV 文件
- javascript - 如何在 app.route('path') 中定义路径
- javascript - Axios post call 会改变参数吗?
- sql - 插入上个月的缺失天数
- css - 在 css 中定义的字体真棒图标
- asp.net-core - 带字符串参数的 FromBodyAttribute 需要 JSON ASP.NET CORE 2.1 的双引号
- android - FCM onMessageReceiver 没有被调用
- docker - iptables 中的 Docker 链覆盖 INPUT 规则
- ansible - Ansible become_user asks for password even though it is configured passwordless
- r - 从 r 中的数据中查找列名称为 1