You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段Python排序代码运行报错?求故障排查方案

问题分析与解决方法

嘿,我来帮你看看这段冒泡排序代码的问题哈!你应该是想按子列表里的数字元素对二维列表A排序对吧?但代码里有几个明显的问题,导致运行报错或者结果不符合预期:

1. 未定义变量j,直接触发NameError

你在内层循环里直接用了A[j][1],但从头到尾都没声明j这个变量!内层循环应该用j来遍历元素,而不是重复使用外层的i。

2. 内外层循环变量重名,覆盖外层i的取值

外层循环用了i控制冒泡轮数,结果内层循环又写了for i in range(i)——这会直接覆盖外层的i值,导致外层循环的逻辑完全混乱,排序根本没法正常执行。

3. 只交换数字部分,名字和数字会“错位”

你代码里交换的是A[j][1]和A[j+1][1],也就是只动了每个子列表的数字元素,但对应的名字还留在原来的位置,最后会出现名字和数字不匹配的情况,这肯定不是你想要的结果。


修正后的代码

我把这些问题都修复了,你可以直接运行:

A = [["saurabh",4],["vimlesh",3324],["ranjit",3434],["rakesh",343]]
# 外层循环用i,控制冒泡的轮数
for i in range(len(A)-1, 0, -1):
    # 内层循环用j,遍历当前需要比较的元素
    for j in range(i):
        # 比较子列表的第二个元素,交换整个子列表
        if A[j][1] > A[j+1][1]:
            A[j], A[j+1] = A[j+1], A[j]
print(A)

运行后会得到按数字从小到大排序的完整列表:

[['saurabh', 4], ['rakesh', 343], ['vimlesh', 3324], ['ranjit', 3434]]

内容的提问来源于stack exchange,提问作者Saurabh Pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:02:32