3

次のような2Dマトリックスを作成しました。

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

各列はリストです。行の値は相互に接続されているため、インデックス番号2の3番目の行の値は互いに属します。

最初に3行目、次に4行目で行を並べ替えて、次のようにします。

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

どうしたらいいのかわからない。3番目の列の値を持つリストを1つ並べ替えることができます。次に、新しいインデックス番号を見つけて、古いものと比較します。次に、他のリストも調整して、すべての行が再び正しくなるようにします。しかし、それでも4行目を並べ替える必要があります。

ここにリストのリストをソートするためのコードがいくつかありますが、列ではなく行のリストが必要です(よく理解している場合)。

それとも、辞書を作成するのが賢い方法ですか?

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 に答える