You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python二维数组多列确定性数值排序及通用列组合实现

Python二维数组多列层级排序方案

原始数组

arr = [[130, 175, 75, 152],
 [96, 132, 122, 112],
 [174, 218, 141, 196],
 [661, 701, 21, 683],
 [707, 746, 375, 724],
 [957, 998, 305, 980],
 [768, 806, 26, 788],
 [957, 998, 394, 974],
 [768, 806, 286, 787],
 [174, 218, 328, 194],
 [894, 933, 80, 914],
 [130, 175, 182, 152],
 [96, 132, 329, 114],
 [894, 933, 166, 913]]

期望排序结果

[[96, 132, 122, 112],
 [96, 132, 329, 114],
 [130, 175, 75, 152],
 [130, 175, 182, 152],
 [174, 218, 141, 196],
 [174, 218, 328, 194],
 [661, 701, 21, 683],
 [707, 746, 375, 724],
 [768, 806, 26, 788],
 [768, 806, 286, 787],
 [894, 933, 80, 914],
 [894, 933, 166, 913],
 [957, 998, 305, 980],
 [957, 998, 394, 974]]

问题解答

1. 如何进行数值排序(而非字典序)?

Python中整数的比较逻辑本身就是基于数值大小的,list.sort()默认会按元素的自然顺序排序——对于二维数组,默认会依次比较子数组的每个元素(先第0列,再第1列,以此类推),这和你需要的层级排序逻辑完全一致,且是数值排序而非字典序。

如果想要更明确地指定排序依据(避免依赖默认行为),可以通过key参数显式指定排序的列:

# 按第0列→第1列→第2列的顺序数值排序
arr.sort(key=lambda x: (x[0], x[1], x[2]))

执行后数组会直接变成你期望的结果,这里的排序完全基于数值大小,不存在字典序问题。

2. 如何针对任意列组合实现通用排序?

只需要将排序的列索引组合作为参数传入key函数即可,还可以封装成通用函数方便复用:

def sort_2d_array(arr, column_indices):
    """
    对二维数组按指定列组合层级排序
    :param arr: 待排序的二维数组
    :param column_indices: 排序优先级的列索引列表,如[0,1,2]表示先按第0列,再按第1列,最后按第2列
    """
    arr.sort(key=lambda x: tuple(x[col] for col in column_indices))

# 示例:按第2列→第0列排序
sort_2d_array(arr, [2, 0])
# 示例:按第1列→第3列排序
sort_2d_array(arr, [1, 3])

这种方式可以灵活支持任意列的组合排序,排序逻辑始终是数值比较,结果完全确定。


内容的提问来源于stack exchange,提问作者skeetastax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:33:10