2011-02-10 7 views
0

インデックスのリストをPythonで指しているもので並べ替えるにはどうすればよいですか?インデックスの並べ替え

私は

indices = list(range(len(mylist))) 

を持っaが、その後の指標mylist[a] > mylist[b]bの前にあれば、私はそのようインデックスをソートしたいです。

答えて

0

のPython 2.6+、最もエレガントな答え:

indices.sort(key = lambda x:mylist[x], reverse = True) 
3
indicies.sort(lambda x,y:mylist[x]-mylist[y]) 
+0

は私が仕事にソート得るために何かをインポートする必要がありますか? –

+0

私の編集を参照してください、申し訳ありません。 Sortはリスト関数です – dfb

+0

また、mylistがnumpy浮動小数点数のリストであればどうでしょうか?次に、整数を返す符号関数が必要です。 'int(numpy.sign(...))'は私ができる最高のものですか? –

1

また、私が先行 場合のa、bようにインデックスをソートしたい

...私はあなたの元の質問で提供された情報を使用して、答えとして次のスニペットを追加してみましょうインデックスはmylist [a]> mylist [b]です。

...とマイリストが numpyのfloatのリストがあるものならば、あなたのコメントも

で持っている追加情報、?

その後、あなたは、単に行うことができます。

In [2]: import numpy 

In [3]: a = numpy.asarray([-1, 2.73, 15.827, -8.48, 9, 13, 15, 3.22, 0, -1, 1]) 

In [4]: indices = a.argsort()[::-1] 
Out[4]: array([ 2, 6, 5, 4, 7, 1, 10, 8, 9, 0, 3]) 

In [5]: a[indices] 
Out[5]: 
array([ 15.827, 15. , 13. , 9. , 3.22 , 2.73 , 1. , 
    0. , -1. , -1. , -8.48 ]) 
+0

面白い、ありがとう! –

関連する問題