2

まず第一に、これがあまりにも素朴な場合はお詫びします(私は初心者です)。次のタイプのリストのリストがあります。最初に、内部リストの最後のメンバーで昇順で並べ替えます。

data =  [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2] ]

私は:を使用してこれを達成します。これにより、次sorted(data,key=operator.itemgetter(2),reverse = True)のようになります。

[[1, .45, 0], [3, .98, 0],[4, .82, 1], [5, .77, 1], [2, .49, 2], [6, .98, 2]]

ここで、サブリスト内で並べ替えます。つまり、最初に、中央のメンバーをキーとして使用して、最後のメンバーを「0」としてリストを降順で並べ替えます。次に、最後のメンバーとして「1」を使用してサブリストを並べ替えます。各サブリストの要素の数は異なり、不明であることに注意してください。最終的なリストは次のようになります。

[[3, .98, 0],[1, .45, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2],[2, .49, 2] ]

リストは実際には非常に膨大であるため、効率的な実装を探しています。任意のガイダンスをいただければ幸いです!

4

2 に答える 2

3
>>> data =  [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2] ]
>>> sorted(data, key=lambda x:(x[2], -x[1]))
[[3, 0.98, 0], [1, 0.45, 0], [4, 0.82, 1], [5, 0.77, 1], [6, 0.98, 2], [2, 0.49, 2]]

必要に応じてラムダに用語を追加できます

于 2012-06-27T05:29:41.790 に答える
1

ソートされた複数のキーを渡すことができます。

data =  [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2] ]
sorted(data, key=lambda x: (x[2], -x[1]))

[[3, 0.98, 0],
 [1, 0.45, 0],
 [4, 0.82, 1],
 [5, 0.77, 1],
 [6, 0.98, 2],
 [2, 0.49, 2]]
于 2012-06-27T05:35:49.400 に答える