0

これと同様の質問がありますが、代わりに次のようにタプルにリストが含まれています。

mytuple = (
 ["tomato", 3],
 ["say", 2],
 ["say", 5],
 ["I", 4],
 ["you", 1],
 ["tomato", 6],
)

これを並べ替える最も効率的な方法は何ですか?

4

4 に答える 4

7

ソートされたタプルを簡単に取得できます。

>>> sorted(mytuple)
[['I', 4], ['say', 2], ['say', 5], ['tomato', 3], ['tomato', 6], ['you', 1]]

これにより、リスト内の項目に基づいて並べ替えられます。最初の 2 つが一致する場合は、2 番目を比較します。

基準が異なる場合は、比較機能を提供できます。

更新:コメント者が指摘したように、これはリストを返します。次のように別のタプルを取得できます。

>>> tuple(sorted(mytuple))
(['I', 4], ['say', 2], ['say', 5], ['tomato', 3], ['tomato', 6], ['you', 1])
于 2009-05-27T18:16:04.380 に答える
5

タプルをソートすることはできません。

できることは、タプルをソートしないsorted()を使用することですが、タプルからソートされたリストを作成します。ソートされたタプルが本当に必要な場合は、sorted からの戻り値をタプルとしてキャストできます。

mytuple = tuple(sorted(mytuple, key=lambda row: row[1]))

リストを作成してから破棄する (元のタプルも破棄する) ため、これはメモリの浪費になる可能性があります。タプルは必要ない可能性があります。リストから始めてソートする方がはるかに効率的です。

于 2009-05-27T19:38:07.350 に答える
1

残念ながら、新しいタプルをインスタンス化する必要があります:

mytuple = sorted(mytuple)

トリックを行う必要があります。 sortedただし、タプルは返されません。tuple()必要に応じて通話を折り返します。データセットが長い場合、これはコストがかかる可能性があります。

サブリストの 2 番目の要素を設定する必要がある場合はkey、関数にパラメーターを使用できsortedます。そのためにはヘルパー関数が必要です。

mytuple = sorted(mytuple, key=lambda row: row[1])
于 2009-05-27T18:13:59.627 に答える
1

その質問に対する受け入れられた回答 ( sorted(..., key=itemgetter(...))) で使用されている手法は、この種のイテラブルで機能するはずです。ここに提示されたデータに基づいて、そこに提示された正確な解決策があなたが望んでいるものだと思います.

于 2009-05-27T18:14:09.330 に答える