#並べ替えたい
##sortを使う
###昇順
l = [1, 2, 3, 5, 4, 8]
l.sort()
l
[1, 2, 3, 4, 5, 8]
###降順
l = [1, 2, 3, 5, 4, 8]
l.sort(reverse=True)
l
[8, 5, 4, 3, 2, 1]
sort()はタプルに対しては使えない。sort()を使うと元のリストが書き換えられる。
##sortedを使う
l = [2, 1, 3, 5, 4, 8]
sorted(l), l
([1, 2, 3, 4, 5, 8], [2, 1, 3, 5, 4, 8])
元のリストはそのまま。sorted()は文字列やタプルを引数にできるが、返すのはリスト。
##itemgetterでリスト内のリストを並べ替え
from operator import itemgetter
ll = [["acd", 123, 456], ["bfe", 234, 102], ["edo", 132, 9]]
print(
sorted(ll, key=itemgetter(0)),
sorted(ll, key=itemgetter(1)),
sorted(ll, key=itemgetter(2)),
sep = "\n"
)
[['acd', 123, 456], ['bfe', 234, 102], ['edo', 132, 9]]
[['acd', 123, 456], ['edo', 132, 9], ['bfe', 234, 102]]
[['edo', 132, 9], ['bfe', 234, 102], ['acd', 123, 456]]
itemgetter()の括弧内でどれで並べ替えするか決められる。
from operator import itemgetter
ll = [["acd", 123, 456], ["bfe", 234, 102], ["edo", 132, 9], ["bfe", 120, 2]]
print(
sorted(ll, key=itemgetter(0, 1)),
sorted(ll, key=itemgetter(0)),
sep = "\n"
)
[['acd', 123, 456], ['bfe', 120, 2], ['bfe', 234, 102], ['edo', 132, 9]]
[['acd', 123, 456], ['bfe', 234, 102], ['bfe', 120, 2], ['edo', 132, 9]]
itemgetter(n, m)とすれば2段階でソートできる。(nが優先、mが第二段階)