Python中如何依据随机指定的多列对二维列表进行排序
实现方案
核心思路
把所有需要排序的列索引按优先级顺序存入一个列表,利用Python排序的key支持元组自动按优先级比较的特性实现需求,两种实现方式可选:
方式1:使用operator.itemgetter(性能更优,推荐)
from operator import itemgetter # 你的原始数据 data = [['ABC', 12, 3, 100], ['DEF', 10, 5, 200], ['GHI', 13, 3, 1000]] # 把所有随机生成的排序列按优先级顺序放到这个列表里,示例对应你给出的n1=2、n2=3场景 sort_columns = [2, 3] # 按指定列优先级排序 sorted_data = sorted(data, key=itemgetter(*sort_columns))
输出结果和你给出的示例完全一致:
[['ABC', 12, 3, 100], ['GHI', 13, 3, 1000], ['DEF', 10, 5, 200]]
方式2:使用lambda表达式(无需导包)
如果不想额外导入模块,可以用lambda生成排序元组,效果完全一致:
sort_columns = [2, 3] sorted_data = sorted(data, key=lambda x: tuple(x[col] for col in sort_columns))
补充说明
- 不管你生成的随机排序列有多少个,只要按优先级顺序放入
sort_columns列表即可,自动适配任意数量的排序维度 - 如果需要倒序排序,给
sorted方法添加reverse=True参数即可 - 如果是要修改原列表而不是生成新的排序后列表,把
sorted换成data.sort(key=...)即可
内容的提问来源于stack exchange,提问作者blackwings15
相关产品推荐
相关产品推荐

