如何按列对二维列表进行排序?
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]])
我想要这样的二维列表:
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]])