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

Python列表sort()方法排序结果不符合数值预期的原因

问题根因

input() 函数接收的所有输入默认返回字符串(str)类型,你代码里的marks列表存储的全是字符串元素,而非数值类型。
Python对字符串执行sort()排序时,默认按照逐字符比对的字典序规则排序,不会自动将字符串解析为数值比较大小:

  • 比对从字符串的第一个字符开始,比较字符对应的ASCII码值,首字符更小的字符串整体排在前面;只有首字符相同时,才会继续比对第二个字符,以此类推。

你得到的异常排序结果['12', '347', '347', '56', '85']完全符合字符串排序逻辑:

  • '12'首字符是'1',ASCII码最小,排第一位
  • 两个'347'首字符是'3',ASCII码小于'5'和'8',所以排在'56'、'85'前面,根本不会触发后续字符的比对,和字符串代表的数值347大小没有关系。
修复方案

接收输入时显式将输入内容转换为数值类型即可,如果成绩为整数就用int()转换,存在小数就用float()转换,修正后的可运行代码如下:

a1 = int(input("enter marks 1 :"))
a2 = int(input("enter marks 2 :"))
a3 = int(input("enter marks 3 :"))
a4 = int(input("enter marks 4 :"))
a5 = int(input("enter marks 5 :"))

marks = [a1, a2, a3, a4, a5]
print(marks)
marks.sort()
print(marks)

输入和你之前相同的测试值,运行后排序结果为[12, 56, 85, 347, 347],符合数值从小到大的排序预期。


内容的提问来源于stack exchange,提问作者Rajnee Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:09:27