2013-09-01 4 views
6

私はリストソート2Dリストパイソン

[1, 0.23] 
[2, 0.39] 
[4, 0.31] 
[5, 0.27] 

の種類を、次のしている私は2番目の列の降順でこれをソートしたいです。私はPythonで 'sorted'関数を試しました。しかし、私に 'TypeError'を与えます: 'float'オブジェクトはサブスクライブできません。 この問題を解決するのを手伝ってください。

+1

私は申し訳ありませんが、それはリストではありません。これは改行を含む数字のシーケンスですが、Pythonの構造はありません。あなたのために失敗した実際のコードとリストの表現を投稿してください。 –

+1

これで、一連のPythonリストが作成されました。外側のリストはありますか? –

+0

Pythonで2Dリストをソートするための#1 Google検索結果であるため、話題にならないことは明らかです。最高の答えは15件です。 – JeffThompson

答えて

11

使いやすさと明確にするためoperator.itemgetter()を使用し、2列目のリストのリストをソートするに:

from operator import itemgetter 
outputlist = sorted(inputlist, key=itemgetter(1), reverse=True) 

か、その場でソートする:

from operator import itemgetter 
inputlist.sort(key=itemgetter(1), reverse=True) 

itemgetter()少し速くよりそのタスクにはlambdaを使用します。

デモ:

>>> from operator import itemgetter 
>>> inputlist = [ 
...  [1, 0.23], 
...  [2, 0.39], 
...  [4, 0.31], 
...  [5, 0.27], 
... ] 
>>> sorted(inputlist, key=itemgetter(1), reverse=True) 
[[2, 0.39], [4, 0.31], [5, 0.27], [1, 0.23]] 

あなたはポイントが直接あなたinputlistで値浮いていた場合にのみ、あなたの例外を参照してくださいね。

>>> inputlist.append(4.2) 
>>> inputlist 
[[1, 0.23], [2, 0.39], [4, 0.31], [5, 0.27], 4.2] 
>>> sorted(inputlist, key=itemgetter(1), reverse=True) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'float' object is not subscriptable 

(Pythonの3のために、Pythonの2のエラーメッセージがありますわずかに異なり、代わりにTypeError: 'float' object has no attribute '__getitem__'になります)。

これは、外部リストのすべての要素にitergetter(1)呼び出しが適用されていますが、現在追加されている浮動小数点値ではなく、ネストされた順序付きシーケンスでのみ機能するためです。

+0

私はこれを試しましたが、私の2番目の列が浮動小数点型であるため、 'TypeError'が返されます: 'float'オブジェクトはunsubscriptableです –

+1

@ChinthakaNadunRatnaweera:いいえ、あなたのリストはネストされていません。外側のリストで*直接参照されている浮動小数値*があります。あなたのリストを印刷し、それをあなたの質問にコピーしてください。 –

18

あなたはラムダを使用することができます。

>>> li=[[1, 0.23], 
... [2, 0.39], 
... [4, 0.31], 
... [5, 0.27]] 
>>> sorted(li,key=lambda l:l[1], reverse=True) 
[[2, 0.39], [4, 0.31], [5, 0.27], [1, 0.23]] 

またはその他の方法:

>>> sorted(li,key=lambda l:l[1]) 
[[1, 0.23], [5, 0.27], [4, 0.31], [2, 0.39]] 
関連する問題