首页 > 解决方案 > 如何按列对二维列表进行排序?

问题描述

我想要一个像这样的二维列表:

initial_table = [
    [1, 2, 3],
    [5, 4, 3],
    [2, 3, 4]
]

并对每一列进行垂直排序以获得:

sorted_table = [
    [1, 2, 3],
    [2, 3, 3],
    [5, 4, 4]
]

编辑:我尝试过使用sorted_table = sorted(initial_table, key=lambda a:a[0]),但这只是对一列进行排序,有没有办法让它排序多个?

标签: pythonnested-lists

解决方案


转置使用zip(*l)以获取列列表,然后对每个单独的列进行排序,然后转回:

list(zip(*(sorted(col) for col in zip(*initial_table))))

逐步输出:

print(list(zip(*initial_table)))
# [(1, 5, 2), (2, 4, 3), (3, 3, 4)]
print([sorted(l) for l in zip(*initial_table)])
# [[1, 2, 5], [2, 3, 4], [3, 3, 4]]
print(list(zip(*(sorted(col) for col in zip(*initial_table)))))
# [(1, 2, 3), (2, 3, 3), (5, 4, 4)]

推荐阅读