pythonでソート
リストをソートしたい
条件がシンプルな場合は、リストをそのままソートしてしまえばよい。
1 2 3 | olist = [5, 3, 1, 2, 4] olist.sort() print(olist) |
単純なリストであれば、破壊的にソートしてもよいと思うが、
リストを分けたいときはsortedを呼び出す。
1 2 3 | olist = [5, 3, 1, 2, 4] slist = sorted(olist) print(slist) |
タプルのリストをソートしたい
リストにタプルを詰めて、タプルの何番目かの情報でソートしたい。
1 2 3 | olist = [('a', 5), ('c', 3), ('e', 1), ('d', 2), ('b', 4)] slist = sorted(olist, key = lambda x : x[1]) print(slist) |
この例では、タプルの2番目(配列の添字は1)の項目を基準にソートしている。
クラスのリストをソートしたい
リストにクラスを詰めて、クラスのプロパティでソートしたい。
1 2 3 4 5 6 7 8 9 10 11 12 | class Dto: def __init__(self, id, name): self.id = id self.name = name def __repr__(self): return '[{0}:{1}]'.format(self.id, self.name) olist = [ Dto(5, 'a'), Dto(3, 'c'), Dto(1, 'e'), Dto(2, 'd'), Dto(4, 'b') ] slist = sorted(olist, key = lambda x : x.name) print(slist) |
この例では、クラスのnameプロパティでソートしている。
文字列として格納した数値のリストを数値としてソートしたい
1 2 3 | olist = ['1', '11', '111', '2', '22', '3', '33'] slist = sorted(olist, key = lambda x : int(x)) print(slist) |
ソートのキーのみ数値として認識させているので、ソート結果の内容は文字列のままになっている。
逆順ソート
1 2 3 4 5 6 | olist = [5, 3, 1, 2, 4] slist = sorted(olist, reverse = True) print(slist) print(olist) olist.sort(reverse = True) print(olist) |
reverse引数にTrueを指定すると逆順ソートが可能になる。
ソートではないが、リストのフィルタリングを行いたい
偶数のみ抽出
1 2 3 | olist = [5, 3, 1, 2, 4] flist = list(filter(lambda x : x % 2 == 0, olist)) print(flist) |
1 2 3 | olist = [('a', 5), ('c', 3), ('e', 1), ('d', 2), ('b', 4)] slist = list(filter(lambda x : x[1] % 2 == 0, olist)) print(slist) |
1 2 3 4 5 6 7 8 9 10 11 12 | class Dto: def __init__(self, id, name): self.id = id self.name = name def __repr__(self): return '[{0}:{1}]'.format(self.id, self.name) olist = [ Dto(5, 'a'), Dto(3, 'c'), Dto(1, 'e'), Dto(2, 'd'), Dto(4, 'b') ] slist = list(filter(lambda x : x.id % 2 == 0, olist)) print(slist) |
まとめ
ソートは出力時に是非行いたい。
フィルターは、リストやマップに入れる前に条件を付ければよい気がする。
同じタグの記事
- BOM付きUTF-8からBOMを除去するpython
- jythonのヒープメモリ設定
- Kotlin1.2.50がリリースされていた
- macOSをHigh Sierraに更新した。スクリプト実行環境のバージョンは変わったのか
- macOSをMojaveに更新した。スクリプト実行環境のバージョンは変わったか
- pathlib.Pathを調べる
- pyenvでpython環境をインストール
- pyenvとvirtualenvでpython環境を構築
- python unpack
- python3で数値のlistを文字列のlistに変換
同じカテゴリの記事