3

我创建了一个像这样的二维矩阵:

45  67  Row  Fine
25  22  Abe  Real
58  54  Abe  Noon

每列都是一个列表。行中的值是连接在一起的,因此第三行中索引号为 2 的值属于彼此。

我想对行进行排序,首先在第三行,然后在第四行,使其变为:

58  54  Abe  Noon  
25  22  Abe  Real 
45  67  Row  Fine

我不知道该怎么走。我可以对一个列表进行排序,该列表具有第三列的值。然后找出新的索引号并将它们与旧的进行比较。然后我也可以调整其他列表,以便所有行再次正确。但是我仍然需要对第四行进行排序。

我在这里看到了一些用于对列表列表进行排序的代码,但是我需要行列表而不是列列表(如果我理解得很好的话)。

还是创建字典是一种明智的方式?

4

2 回答 2

1

您有一个列列表。要将其放入行列表,您可以使用zip

iterable_of_rows = zip(*my_list_of_columns)

将其与执行这些操作的典型方法相结合:

import operator
sorted_list_of_rows = sorted(zip(*my_list_of_columns), key = operator.itemgetter(2,3))
list_of_columns = list(zip(*sorted_list_of_rows))

和测试:

>>> my_list_of_columns = [[45,25,48],[67,22,54],["Row","Abe","Abe"],["Fine","Real","Noon"]]
>>> import operator
>>> sorted_list_of_rows = sorted(zip(*my_list_of_columns), key = operator.itemgetter(2,3))
>>> list_of_columns = list(zip(*sorted_list_of_rows))
>>> list_of_columns
[(48, 25, 45), (54, 22, 67), ('Abe', 'Abe', 'Row'), ('Noon', 'Real', 'Fine')]
于 2012-09-10T12:26:17.103 回答
0

直接使用列列表很麻烦,但您可以使用zip和使用行:

>>> print(data)
[[45, 25, 58], [67, 22, 54], ['Row', 'Abe', 'Abe'], ['Fine', 'Real', 'Noon']]

>>> print(sorted(zip(*data), key=lambda x: (x[2], x[3])))
[(58, 54, 'Abe', 'Noon'), (25, 22, 'Abe', 'Real'), (45, 67, 'Row', 'Fine')]
于 2012-09-10T12:26:37.747 回答