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前面,百思不得其解,求指教
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前面,百思不得其解,求指教
因为237和100的长度相等,你并没有指定相等时的排序规则(系统按给定的输入顺序?)。
试试这个
sorted([13,1,237,89,100], key=lambda x: (len(str(x)), x ))
先按len(str(x))
排序,相等时再按x
排序
你给的例子不是很恰当,如果都是数字的话,没必要指定key了
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
python 的文档:https://docs.python.org/2/lib... 显示:
即,不改变比较相等的元素的相对位置。根据问题给出的 key,237 和 100 是“相等”的,所以它们之间的相对关系不会变化,即 237 在 100 之前。