Python中如何按第1列升序排序2D列表,同值时优先按第0列排序
实现多优先级排序的方案
你要的需求可以直接通过给排序key指定多维度规则实现,有两种常用写法:
写法1:使用itemgetter传多参数
直接给itemgetter按优先级顺序传入对应的列索引即可:
from operator import itemgetter arr = [[1,2],[3,4],[0,6],[5,7],[8,9],[5,9]] # 第一优先级按索引1列升序,第二优先级按索引0列升序 arr = sorted(arr, key=itemgetter(1, 0)) print(arr)
运行输出:
[[1, 2], [3, 4], [0, 6], [5, 7], [5, 9], [8, 9]]
写法2:用lambda自定义key(无需引入额外模块)
如果不想导入operator模块,也可以直接用lambda构造排序规则元组:
arr = [[1,2],[3,4],[0,6],[5,7],[8,9],[5,9]] arr = sorted(arr, key=lambda x: (x[1], x[0])) print(arr)
两种写法效果完全一致。
原理解释
Python的sorted函数会自动对元组类型的key按元素顺序依次比较:先比较元组第一个元素,相等时再比较第二个,以此类推。你之前只传入了单维度的itemgetter(1),所以第一优先级值相等时会默认保留原列表的相对顺序(Python内置排序是稳定排序),补充第二维度排序规则后就可以满足需求。
内容的提问来源于stack exchange,提问作者Pallab Tewary
相关产品推荐
相关产品推荐

