无需Numpy:如何对Python二维列表实现多规则排序?
对二维列表按指定列排序的实现方案
你可以直接用Python内置的sort()或sorted()函数,通过指定key参数来实现需求,而且针对元组的排序方案完全适用于二维列表——因为二维列表的子列表和元组一样是可索引的序列,排序逻辑通用。
实现代码
方式1:原地排序(修改原列表)
lst = [[9,3,4], [8,4,2], [4,2,4]] # 按第3列升序,第3列相同则按第1列升序排序 lst.sort(key=lambda x: (x[2], x[0])) print(lst) # 输出结果: # [[8, 4, 2], [4, 2, 4], [9, 3, 4]]
方式2:非原地排序(生成新列表,原列表不变)
如果不想修改原列表,用sorted()函数生成排序后的新列表:
lst = [[9,3,4], [8,4,2], [4,2,4]] sorted_lst = sorted(lst, key=lambda x: (x[2], x[0])) print(sorted_lst) # 输出结果和上面一致
逻辑说明
key=lambda x: (x[2], x[0])是核心:x[2]对应子列表的第3列元素,排序时优先按这个值升序排列;- 当多个子列表的
x[2]值相同时,会比较x[0](第1列元素),按其升序排列,正好符合你的需求。
- 这种方式完全不需要依赖Numpy,纯Python内置函数就能搞定。
内容的提问来源于stack exchange,提问作者tsx
相关产品推荐
相关产品推荐

