お困りの方へ
listをソートしたいときに、sortかsortedだったか迷うときありますよね?
公式ドキュメントに明記されています。
この記事では、実際にコードを書いて説明します。
目次
sortとsorted
sort
sortはオブジェクトそのものがソートされます。
idを見ると、ソート前とソート後のオブジェクトが同じことを確認できます。
l = [5, 3, 1, 4, 2] print(l) print(id(l)) # [5, 3, 1, 4, 2] # 2376540581376 ls = l.sort() print(ls) print(id(ls)) # None # 140708468534488 print(l) print(id(l)) # [1, 2, 3, 4, 5] # 2376540581376
sorted
sortedはソートされた新たなオブジェクトを生み出します。
ソート対象のオブジェクト自体はソートされず、そのままです。
l = [5, 3, 1, 4, 2] print(l) print(id(l)) # [5, 3, 1, 4, 2] # 2376543782400 ls = sorted(l) print(ls) print(id(ls)) # [1, 2, 3, 4, 5] # 2376540581376 print(l) print(id(l)) # [5, 3, 1, 4, 2] # 2376543782400
昇順・降順
昇順・降順はreverseで指定します。
デフォルトはreverse=Falseで、昇順がデフォルトとなります。
sortもsortedも昇順・降順指定はreverseなのでsortでサンプルコードを書きます。
数値のソート
# 数値のソート l = [5, 3, 1, 4, 2] print(l) # [5, 3, 1, 4, 2] # 降順でソートする。 l.sort(reverse=True) print(l) # [5, 4, 3, 2, 1] # 昇順でソートする。 l.sort(reverse=False) print(l) # [1, 2, 3, 4, 5]
文字列のソート
# 文字列のソート l = ['desk', 'chair', 'light'] print(l) # ['desk', 'chair', 'light'] # 降順でソートする。 l.sort(reverse=True) print(l) # ['light', 'desk', 'chair'] # 昇順でソートする。 l.sort(reverse=False) print(l) # ['chair', 'desk', 'light']
時刻のソート
# 時刻のソート now = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) t1 = now - timedelta(days=1) t2 = now + timedelta(days=1) t3 = now l = [t1, t2, t3] print(l) # [datetime.datetime(2024, 9, 1, 0, 0), datetime.datetime(2024, 9, 3, 0, 0), datetime.datetime(2024, 9, 2, 0, 0)] # 降順でソートする。 l.sort(reverse=True) print(l) # [datetime.datetime(2024, 9, 3, 0, 0), datetime.datetime(2024, 9, 2, 0, 0), datetime.datetime(2024, 9, 1, 0, 0)] # 昇順でソートする。 l.sort(reverse=False) print(l) # [datetime.datetime(2024, 9, 1, 0, 0), datetime.datetime(2024, 9, 2, 0, 0), datetime.datetime(2024, 9, 3, 0, 0)]