如何按列对二维列表进行排序?

How to sort 2D list by columns?

我想要这样的二维列表:

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]) 但它只能对一列进行排序,有没有办法让它对多个列进行排序?

使用 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)]

numpy是你的朋友!

import numpy as np

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

np.sort(np.array(initial_table), axis=0)

>> array([[1, 2, 3],
          [2, 3, 3],
          [5, 4, 4]])