以下のような、リストのリストまたはタプルのリストのデータがあります。
data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]
そして,サブセット内の2番目の要素でソートしたいと思います。つまり,2,5,8でソートしたいのですが,2
は(1,2,3)
から,5
は(4,5,6)
からです。これを行う一般的な方法は何ですか?リストにはタプルとリストのどちらを格納すべきでしょうか?
Stephen's answerが私の使用するものです。 念のため、リスト内包を使ったDSU(decorate-sort-undecorate)パターンを紹介します。
decorated = [(tup[1], tup) for tup in data]
decorated.sort()
undecorated = [tup for second, tup in decorated]
あるいは,もっと簡潔に言うと
[b for a,b in sorted((tup[1], tup) for tup in data)]
Python Sorting HowTo](http://wiki.python.org/moin/HowTo/Sorting#TheOldWayUsingDecorate-Sort-Undecorate)で述べられているように、主要な機能が利用できるようになったPython 2.4以降、これは不要になりました。