我对sorted()函数做错了什么?

时间:2018-04-03 10:44:36

标签: python list sorting

我的问题是我不明白为什么我的sorted()在高于hunderd的整数上没有正常工作。

代码:

new_sheets = [sorted(i) for i in new_sheets]

输入:

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

输出:

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

我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

因为它们不是整数,所以它们是字符串。字符串排序按字母顺序排列,因此任何以1开头的内容都会出现在以23等开头的任何内容之前。为了排序好像是整数,请执行:

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

它会在排序之前将它们转换为整数但仍返回字符串。如果要返回整数,请执行:

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

答案 1 :(得分:3)

您的输入似乎是字符串而不是整数。字符串按字典顺序排序(字典顺序),因此'111'在'90'之前。

尝试

sorted(int(x) for x in i)