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

使用Python sorted()函数遇异常:三位数整数排序失效求助

问题分析与解决方案

嘿,这个问题其实挺常见的——你遇到的是字符串字典序排序和数值排序的核心差异!

为什么会出现这个问题?

sorted() 函数默认对字符串类型的元素采用**字典序(lexicographical order)**排序,也就是按照字符的Unicode码点逐个比较,而不是把它们当作数值来比较。举个例子:

  • 字符串 '100' 和 '36' 比较时,会先看第一个字符:'1' 的Unicode码点比 '3' 小,所以 '100' 会被排在 '36' 前面,哪怕它的数值更大。
  • 同理,'90' 的第一个字符是 '9',码点远大于 '103' 的第一个字符 '1',所以排序后 '90' 反而在 '103' 后面。

这就是你看到第三组 ['99', '111', '103', '90'] 排序后变成 ['103', '111', '90', '99']、第四组 ['36', '48', '47', '100'] 变成 ['100', '36', '47', '48'] 的原因。

怎么解决?

只需要给 sorted() 加上 key=int 参数,让排序时先把每个字符串转换成整数,再按数值大小排序即可。修改后的代码如下:

new_sheets = [sorted(i, key=int) for i in new_sheets]

验证结果

用你的输入测试,修改后的输出会变成:

[['0', '64', '65'], ['64', '86', '94', '94'], ['90', '99', '103', '111'], ['36', '47', '48', '100']]

完全符合数值排序的预期,而且原元素的字符串类型也会被保留,只是用数值作为排序依据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:10:56