Python多维列表排序:字典序的作用与排序结果疑问
关于多维列表排序与字典序的解惑
首先要明确:你这段代码没有用字典序比较整个子列表,而是指定了key=lambda x:x[0],意思是只提取每个子列表的第一个元素,按数值大小排序。
你的代码逻辑拆解
你原代码里的排序依据是每个子列表的第一个元素:10、200、2。按数值大小排序的话,2 < 10 < 200,所以对应的子列表顺序就是[[2, 4], [10, 1], [200, 2]],这完全符合数值排序的规则。
你误解的点
你误以为的[10, 2, 200]顺序,是把数字当成字符串按字典序排序的结果(比如字符串"10"的首字符'1'小于"2"的首字符'2',所以"10"排在"2"前面)。但你的代码里是直接用数值比较,不是字符串。如果要得到你误以为的顺序,得把第一个元素转成字符串再排序:
a = [[10, 1], [200, 2], [2, 4]] b = sorted(a, key=lambda x: str(x[0])) print(b) # 输出: [[10, 1], [200, 2], [2, 4]]
真正的Python字典序(针对列表)
如果不指定key,直接调用sorted(a),才会用字典序比较整个子列表。规则是:
- 从第一个元素开始逐个比较,哪个子列表的元素更小,整个子列表就排在前面;
- 如果第一个元素相等,再比较第二个元素,以此类推。
比如举个第一个元素相等的例子:
a = [[10, 5], [10, 1], [5, 3]] print(sorted(a)) # 输出: [[5, 3], [10, 1], [10, 5]]
这里先比第一个元素5 < 10,所以[5,3]排最前;剩下两个子列表第一个元素都是10,就比第二个元素1 <5,所以[10,1]排在[10,5]前面。
内容的提问来源于stack exchange,提问作者Musanna
相关产品推荐
相关产品推荐

