4

いくつかのタプルのリストがあります。各タプルには 3 つの要素があります。リストをソートする必要があります。2 つのタプル間の関係を解消するには、タプルの最初の要素を調べ、まだ関係がある場合は 2 番目の要素を調べます。リストは以下のようなものです。

L = [(1, 14, 0), (14, 1, 1), (1, 14, 2), (14, 2, 3), (2, 4, 4), (4, 11, 5), (11, -1000, 6)]

C では、sort 関数は比較関数を使用し、すべてを簡単に実行します。しかし、時々 を試した後、私はそれを理解できませんでしたpython。誰でも私を助けることができますか?

4

1 に答える 1

11

リストを並べ替えるだけです。デフォルトの並べ替えは、必要なことだけを行います。

2 つのタプルを比較する場合、内容に従って並べ替えられます。最初に最初の要素でソートされ、それらが等しい場合は 2 番目の要素でソートされます。

デモ:

>>> L = [(14, 2, 3), (1, 14, 0), (14, 1, 1), (1, 14, 2), (2, 4, 4), (4, 11, 5), (11, -1000, 6)]
>>> sorted(L)
[(1, 14, 0), (1, 14, 2), (2, 4, 4), (4, 11, 5), (11, -1000, 6), (14, 1, 1), (14, 2, 3)]

(14, 2, 3)の後にまだソートされていることを示すために、要素を前方に移動しました(14, 1, 1)

Python のlist.sort()メソッドと関数は、別の並べ替え順序が必要な場合に、代わりに並べ替える値を返すsorted()関数を取ります。keyたとえば、最後の要素を最初に並べ替え、次に最後から 2 番目の要素を並べ替える場合は、次のようにします。

sorted(L, key=lambda t: t[::-1])

ラムダは逆のタプルを返し、代わりにソートします。渡した callable オブジェクトkeyは、入力シーケンス内の各要素に対して呼び出され、並べ替えの前にリストを「拡張」します。

[s[1] for s in sorted((key(s), s) for s in L)]

反転スライスt[::-1]を使用します。

詳細については、Python Sorting HOWTOを参照してください。

于 2013-08-22T07:53:22.160 に答える