CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Pythonでリストのソートサンプル。バイト列を数値順、多重ソートなど

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

Pythonでリストの多重ソートを調べたのでメモ。
基本的なソートを含めてまとめておく。

リストにはsortメソッドがある。元のリストが書き換わる事に注意。

>>> lst=[3,2,1]
>>> lst.sort()
>>> lst
[1, 2, 3]

書き換えたく無い場合は、組み込み関数のsortedを使う。使い勝手はsortと同じ。

>>> lst=[3,2,1]
>>> sorted(lst)
[1, 2, 3]
>>> lst
[3, 2, 1]

逆順ソートするには、reverseか、cmpを使う。

>>> sorted([1,2,3],reverse=True)
[3, 2, 1]
>>> sorted([1,2,3],cmp=lambda x,y:cmp(y,x))
[3, 2, 1]

数値をバイト列のリストでソートすると辞書順ソートになる。

>>> sorted(['2','10','1'])
['1', '10', '2']

数値のバイト列を数値順でソートするには、cmpかkeyを使う。

>>> sorted(['2','10','1'],cmp=lambda x,y:cmp(int(x),int(y)))
['1', '2', '10']
>>> sorted(['2','10','1'],key=lambda x:int(x))
['1', '2', '10']

2次元のソート。数値や文字が組み合わさってても賢くソートしてくる

>>> sorted([[3,1],[2,2],[1,4],[1,3]])
[[1, 3], [1, 4], [2, 2], [3, 1]]
>>> sorted([[3,'a'],[2,'b'],[1,'d'],[1,'c']])
[[1, 'c'], [1, 'd'], [2, 'b'], [3, 'a']]

バイト列の数値ソートはcmpではできない事がある。その場合はkeyで。

>>> sorted([['2','a'],['10','b'],['1','d'],['1','c']],cmp=lambda x,y:cmp(int(x),int(y)))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
TypeError: int() argument must be a string or a number, not 'list'
>>> sorted([['2','a'],['10','b'],['1','d'],['1','c']],key=lambda x:[int(x[0]),x[1]])
[['1', 'c'], ['1', 'd'], ['2', 'a'], ['10', 'b']]

sortedのカスタムをするときは、cmpを使うイメージだったけど、
複雑な場合は keyでないと対応できない、むしろ、いつも key で良さそうだ。



みんなのPython 改訂版みんなのPython 改訂版
(2009/04/11)
柴田 淳

商品詳細を見る


Python クックブック 第2版Python クックブック 第2版
(2007/06/26)
Alex Martelli、Anna Martelli Ravenscroft 他

商品詳細を見る
スポンサーサイト


★☆★コメント★☆★

コメントの投稿

Name
Subject
Mail
URI
Comment
Pass
Secret 管理者にだけ表示を許可する

トラックバック

http://iyukki.blog56.fc2.com/tb.php/139-2742057d

 | HOME | 

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。