使用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
相关产品推荐
相关产品推荐

