2013-11-25 11 views
15

sort()メソッドやその他の方法を使用してリストを列でソートする方法はありますか?私がリストを持っているとしましょう:列ごとに多次元配列をソートするには?

[ 
[John,2], 
[Jim,9], 
[Jason,1] 
] 

そして私は、それは次のようになりますように、それをソートしたかった:

[ 
[Jason,1], 
[John,2], 
[Jim,9], 
] 

これを行うための最善の方法でしょうか?

編集:

現在、私は範囲外のインデックスのエラーに遭遇しています。私は1000行b 3列と言うことができる2次元配列を持っています。 3番目の列に基づいてソートしたいこれは正しいコードですか?

sorted_list = sorted(list_not_sorted, key=lambda x:x[2]) 
+0

参照:http:// stackoverflow。com/questions/2828059/sorting-arrays-in-numpy-by-column – duhaime

+0

今すぐインデックス外のエラーが発生しています。私は1000行b 3列と言うことができる2次元配列を持っています。 3番目の列に基づいてソートしたいこれは正しいコードですか? –

+0

あなたの編集に応答して、リストはゼロインデックス付けされているので、yes x [2]が第3列です。sorted_list = sorted(list_not_sorted、key = lambda x:x [2]物語の道徳は、キーとラムダまたは実際の関数を使用して、 'sorted'関数と' sort'関数のいくつかの規定でソートすることができます。 – squiguy

答えて

22

はい。 sortedが新しいリストを返し

sorted(li,key=lambda x: x[1]) 
Out[31]: [['Jason', 1], ['John', 2], ['Jim', 9]] 

なお:sortedビルトインはkey引数を受け入れます。インプレースで並べ替える場合は、リストの.sortメソッドを使用します(これは便宜上、key引数を受け入れます)。

または代替的に、

from operator import itemgetter 
sorted(li,key=itemgetter(1)) 
Out[33]: [['Jason', 1], ['John', 2], ['Jim', 9]] 

Read more on the python wiki

+0

これは新しいリストを返すと言いたいかもしれません。 – iCodez

+1

確かに。元のリストを変更したい場合、 'li.sort(key = whatever)'になります。 – user2357112

6

キーを使用してソートされたメソッドを使用できます。

sorted(a, key=lambda x : x[1]) 
0

あなたはそのオプションのkey parameterlambda expressionlist.sortを使用することができます。

>>> lst = [ 
...  ['John',2], 
...  ['Jim',9], 
...  ['Jason',1] 
... ] 
>>> lst.sort(key=lambda x:x[1]) 
>>> lst 
[['Jason', 1], ['John', 2], ['Jim', 9]] 
>>> 

これはその場でリストをソートします。


大きなリストのために、代わりにlambdaoperator.itemgetterを使用するように速くなることに注意してください:sort/sorted

>>> from operator import itemgetter 
>>> lst = [ 
...  ['John',2], 
...  ['Jim',9], 
...  ['Jason',1] 
... ] 
>>> lst.sort(key=itemgetter(1)) 
>>> lst 
[['Jason', 1], ['John', 2], ['Jim', 9]] 
>>> 
+0

"ラムダ"キーは何ですか? –

+0

@ user3024130 - 'lambda'は、' key'パラメータのためのインライン関数を作成します。私はより良い説明のためのリンクを追加しました。 'lambda 'を使うことは' def func(x):return x [1] 'と' lst.sort(key = func) 'を実行することと変わりありません。 – iCodez

+0

それは意味があります。最低から最高の代わりに、最高から最低までどのようにソートしますか? –

0

オプションkeyパラメータは関数です。関数は、各項目ごとに呼び出され、戻り値は、関数の外にprintを取ってソート

>>> lst = [['John', 2], ['Jim', 9], ['Jason', 1]] 
>>> def my_key_func(item): 
...  print("The key for {} is {}".format(item, item[1])) 
...  return item[1] 
... 
>>> sorted(lst, key=my_key_func) 
The key for ['John', 2] is 2 
The key for ['Jim', 9] is 9 
The key for ['Jason', 1] is 1 
[['Jason', 1], ['John', 2], ['Jim', 9]] 

の順序を決定する。この機能として「インライン」を書くことは十分に簡単です

>>> def my_key_func(item): 
...  return item[1] 

残していますラムダ関数

>>> sorted(lst, key=lambda item: item[1]) 
[['Jason', 1], ['John', 2], ['Jim', 9]] 
0
sorted(list, key=lambda x: x[1]) 

注:これは時間変数で動作しますあまりにも。

関連する問題