2

だから私はこのリストを持っています、それをlistAと呼びます。['5.01','5.88','2.10','9.45','17.58','2.76']各リストの[3]アイテムを、たとえばソートされた順序で取得しようとしています。したがって、最終結果は、サンタを先頭にしてリスト全体を最初からやり直すことになります。それは意味がありますか?

[['John Doe', u'25.78', u'20.77', '5.01'], ['Jane Doe', u'21.08', u'15.20', '5.88'], ['James Bond', u'20.57', u'18.47', '2.10'], ['Michael Jordan', u'28.50', u'19.05', '9.45'], ['Santa', u'31.13', u'13.55', '17.58'], ['Easter Bunny', u'17.20', u'14.44', '2.76']]

4

4 に答える 4

6

ソートされた順序で完全なリストを返したい場合は、これでうまくいくかもしれません。これは入力リストを受け取り、sortedその上で実行されます。reverseに設定された引数Trueは、リストを逆 (降順) にソートし、key引数はソートする方法を指定します。この場合float、各リストの 3 番目の引数の です。

In [5]: l = [['John Doe', u'25.78', u'20.77', '5.01'] # continues...    
In [6]: sorted(l, reverse=True, key=lambda x: float(x[3]))
Out[6]:
[['Santa', u'31.13', u'13.55', '17.58'],
 ['Michael Jordan', u'28.50', u'19.05', '9.45'],
 ['Jane Doe', u'21.08', u'15.20', '5.88'],
 ['John Doe', u'25.78', u'20.77', '5.01'],
 ['Easter Bunny', u'17.20', u'14.44', '2.76'],
 ['James Bond', u'20.57', u'18.47', '2.10']]

ソートされた順序で値のみが必要な場合は、他の回答が実行可能な方法を提供します。

于 2012-12-04T04:59:22.890 に答える
2

これを試して:

>>> listA=[['John Doe', u'25.78', u'20.77', '5.01'], ['Jane Doe', u'21.08', u'15.20', '5.88'], ['James Bond', u'20.57', u'18.47', '2.10'], ['Michael Jordan', u'28.50', u'19.05', '9.45'], ['Santa', u'31.13', u'13.55', '17.58'], ['Easter Bunny', u'17.20', u'14.44', '2.76']]

>>> [x[3] for x in sorted(listA, reverse = True, key = lambda i : float(i[3]))]
['17.58', '9.45', '5.88', '5.01', '2.76', '2.10']
于 2012-12-04T05:01:55.400 に答える
0
from operator import itemgetter
lstA.sort(reverse = True, key = itemgetter(3))

そして、あなたは行ってもいいです。並べ替えるインデックスが複数ある場合、並べ替え内で itemgetter() を使用すると非常に便利です。次のようにして、同点の場合に最初の値でアルファベット順に並べ替えたいとしましょう。

from operator import itemgetter
lstA.sort(key = itemgetter(0))
lstA.sort(reverse = True, key = itemgetter(3))

そしてほら!

于 2012-12-04T05:07:52.437 に答える