如何对2D列表进行排序?

时间:2016-01-17 23:32:21

标签: python list sorting character

我正在使用类似于下面示例的2D列表,我正在尝试重新排序列:

D C B A

1 3 2 0

1 3 2 0

1 3 2 0

列表的第一行保留用于引用每列的字母。 如何对此列表进行排序,以便按字母顺序放置这些列以实现以下目的:

D C B A    A B C D

1 3 2 0    0 2 3 1

1 3 2 0    0 2 3 1

1 3 2 0    0 2 3 1

我找到了使用lambdas进行排序的示例,但没有找到任何类似的按字符对列进行排序的示例。

我不确定如何实现这种排序,并且非常感谢一些帮助。

2 个答案:

答案 0 :(得分:1)

zip() 2D list,按第一项排序,再按zip()排序。

>>> table = [['D', 'C', 'B', 'A',],
...          [1, 3, 2, 0,],
...          [1, 3, 2, 0],
...          [1, 3, 2, 0]]
>>> for row in zip(*sorted(zip(*table), key=lambda x: x[0])):
...     print(*row)
...
A B C D
0 2 3 1
0 2 3 1
0 2 3 1

答案 1 :(得分:0)

假设在列表中逐行存储的值,如:

zip(*sorted(zip(*a), key=lambda column: column[0]))

要对此数组进行排序,您可以使用以下代码:

[('A', 'B', 'C', 'D'),
 ('0', '2', '3', '1'),
 ('0', '2', '3', '1')]

其中列[0] - 要排序的值(您可以使用列1等)。

输出:

NSTask

<强> 注意 : 如果您正在使用相当大的数组并且执行时间很重要,请考虑使用numpy,它有适当的方法:NumPy sort