2009-05-27 3 views
0

私はthis oneに似た質問がありますが、代わりに私のタプルはリストが含まれているが含まれているタプルを並べ替え:次のように、リスト

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

これをソートする最も効率的な方法は何ですか?

+0

どのフィールドを並べ替えたいですか? – Jody

+2

タプルはソートできません。それは不変です。 –

+0

そして意味的にこのような状況でタプルは意味をなさない。一般にタプルをソートすることは、リストが使われているはずなので、意味をなさない。 – nikow

答えて

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]) 
+3

「ソートされたタプルを取得する」とは、「ソートされた新しいタプルを作成する」という意味ですか? –

+0

sorted()関数はうまく動作します。 –

+1

これは非常に非効率ですが、なぜミルベークのアドバイスを受けて、リストを使って始めてみませんか? Lottが正しいです - タプルを適切にソートすることはできません。 –

1

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

mytuple = sorted(mytuple) 

のようなものは、トリックを行う必要があります。しかし、sortedはタプルを返さないでしょう。必要ならばtuple()に電話をかけてください。データセットが長い場合、これは潜在的にコストがかかる可能性があります。

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

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

その質問(sorted(..., key=itemgetter(...)))への受け入れ答えに使用される技術は、この種の任意の反復可能で動作します:あなたはそのためのヘルパー機能が必要になります。あなたがここに提示したデータに基づいて、私はそこに提示された正確な解決策があなたが望むものだと思っています。

5

あなたはタプルを並べ替えることはできません。

sorted()は、タプルをソートせず、タプルからソートされたリストを作成するというものです。あなたがリストを作成し、それを破棄(ともオリジナルを破棄しているので、これはメモリの無駄することができ

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

:あなたは本当にソートタプルが必要な場合はタプルとしてソートから、あなたはそれからリターンをキャストすることができますタプル)。あなたはタプルを必要としない可能性があります。もっと効率的なのは、リストから始めてそれを並べ替えることです。

関連する問題