pythonでソート

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)

まとめ

ソートは出力時に是非行いたい。
フィルターは、リストやマップに入れる前に条件を付ければよい気がする。

同じタグの記事
同じカテゴリの記事

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA