如何在Python中使用多键实现指定规则的列表排序?
实现指定规则的列表排序
给定待排序列表:
table = [("A", 5, 3), ("B", 5, 6), ("C", 3, 1)]
每个元组元素依次为name、points、ex,需求是先按points降序排序,points相同时按ex升序排序,用Python可以这样实现:
方法一:原地排序(修改原列表)
使用列表内置的sort()方法,直接对原列表进行排序操作:
table.sort(key=lambda x: (-x[1], x[2])) print(table) # 输出结果: [('A', 5, 3), ('B', 5, 6), ('C', 3, 1)]
方法二:生成新排序列表(保留原列表)
使用sorted()函数,返回一个排序后的新列表,原列表保持不变:
sorted_table = sorted(table, key=lambda x: (-x[1], x[2])) print(sorted_table) # 输出结果: [('A', 5, 3), ('B', 5, 6), ('C', 3, 1)]
逻辑说明
- 核心是
key=lambda x: (-x[1], x[2])这个排序规则:-x[1]将points取反,让原本数值大的points在默认升序排序中排在更前面,实现降序效果;- 当两个元组的
points相同时,会自动比较第二个排序键x[2](即ex),按默认的升序规则排序,正好满足points相同时ex升序的需求。
内容的提问来源于stack exchange,提问作者PositiveBowl7
相关产品推荐
相关产品推荐

