为何这段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
相关产品推荐
相关产品推荐

