pythonでソート
リストをソートしたい
条件がシンプルな場合は、リストをそのままソートしてしまえばよい。
olist = [5, 3, 1, 2, 4]
olist.sort()
print(olist)
単純なリストであれば、破壊的にソートしてもよいと思うが、
リストを分けたいときはsortedを呼び出す。
olist = [5, 3, 1, 2, 4]
slist = sorted(olist)
print(slist)
タプルのリストをソートしたい
リストにタプルを詰めて、タプルの何番目かの情報でソートしたい。
olist = [('a', 5), ('c', 3), ('e', 1), ('d', 2), ('b', 4)]
slist = sorted(olist, key = lambda x : x[1])
print(slist)
この例では、タプルの2番目(配列の添字は1)の項目を基準にソートしている。
クラスのリストをソートしたい
リストにクラスを詰めて、クラスのプロパティでソートしたい。
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プロパティでソートしている。
文字列として格納した数値のリストを数値としてソートしたい
olist = ['1', '11', '111', '2', '22', '3', '33']
slist = sorted(olist, key = lambda x : int(x))
print(slist)
ソートのキーのみ数値として認識させているので、ソート結果の内容は文字列のままになっている。
逆順ソート
olist = [5, 3, 1, 2, 4]
slist = sorted(olist, reverse = True)
print(slist)
print(olist)
olist.sort(reverse = True)
print(olist)
reverse引数にTrueを指定すると逆順ソートが可能になる。
ソートではないが、リストのフィルタリングを行いたい
偶数のみ抽出
olist = [5, 3, 1, 2, 4]
flist = list(filter(lambda x : x % 2 == 0, olist))
print(flist)
olist = [('a', 5), ('c', 3), ('e', 1), ('d', 2), ('b', 4)]
slist = list(filter(lambda x : x[1] % 2 == 0, olist))
print(slist)
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に変換
コメントを残す