关于python sorted 的排序问题

sorted([13,1,237,89,100],key=lambda x:len(str(x)))

key是列表中每个元素的转换成字符串后,根据长度来排序

按照个人理解,结果应该是[1,13,89,100,237],即:先按照长度排序,长度一样的,则按照大小排序
但是执行后输出结果是[1,13,89,237,100]

为什么 237 会在100前面,百思不得其解,求指教

阅读 5.9k
2 个回答

python 的文档:https://docs.python.org/2/lib... 显示:

The built-in sorted() function is guaranteed to be stable. A sort is stable if it guarantees not to change the relative order of elements that compare equal — this is helpful for sorting in multiple passes (for example, sort by department, then by salary grade).

即,不改变比较相等的元素的相对位置。根据问题给出的 key,237 和 100 是“相等”的,所以它们之间的相对关系不会变化,即 237 在 100 之前。

因为237和100的长度相等,你并没有指定相等时的排序规则(系统按给定的输入顺序?)。

试试这个

sorted([13,1,237,89,100], key=lambda x: (len(str(x)), x ))

先按len(str(x))排序,相等时再按x排序

你给的例子不是很恰当,如果都是数字的话,没必要指定key了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题