list(リスト)型のソート

前回はリストの更新処理について学習しましたが単純な更新以外にソート処理を簡単に行うことが可能です。

リストのソート

リストをソートする場合、以下の2通りの方法があります。

  • 元のlistはソートせず新たにソートされたlistを作成する組込みのsorted関数を利用する方法
  • list型変数自身が持つsortメソッドを利用して自身をソートする方法

新たにソートされたlistを生成

新たにソートされたlistを生成したい場合、sortedを利用します。この場合、元のリストはソートされません。

sorted
sorted(list型変数, [key], [reverse])

keyとreverseの指定は任意です。

昇順にソートする

引数にlistのみ指定する場合です。

l1 = ['d', 'b', 'c', 'a']
l2 = sorted(l1)
print(l2) # ['a', 'b', 'c', 'd']

ソート順序を逆順にする

引数のreverseにTrueを指定すると、ソート順序が逆順になります。

l1 = ['d', 'b', 'c', 'a']
l2 = sorted(l1, reverse=True)
print(l2) # ['d', 'c', 'b', 'a']

大文字、小文字を区別せずにソートする

keyを指定すると、ソート前に行う処理を指定できます。

正確に理解するためには、後に説明する関数オブジェクトについて理解する必要がありますが、このページではひとまず、具体的な大文字、小文字を区別せずにソートする方法の説明だけにとどめます。

さて、大文字、小文字を区別せずにソートする方法ですが、具体的には引数keyにstr.lowerを指定します。ソート処理前にリストの各要素がいったんすべて小文字に変換されて、それらがソートされた結果が返却されます。

サンプルを見てみましょう。

l1 = ['bc', 'ac', 'bD', 'AB']
l2 = sorted(l1)
print(l2) # ['AB', 'ac', 'bD', 'bc']

l2 = sorted(l1, key=str.lower)
print(l2) # ['AB', 'ac', 'bc', 'bD']

key=str.lowerを指定することにより、大文字、小文字の区別なくソートされていることが確認できます。

リスト自身をソートする

リストそのものをソートしたい場合、sortメソッドを利用します。(このメソッドのように元々の変数の内容が変更されてしまうような作用のことを「破壊的」と呼びます。)

sort
list型変数.sorte([key], [reverse])

これもkeyとreverseの指定は任意です。組み込み関数のsorted関数と使い方はほとんど同じですので、細かい説明は省略します。

昇順にソートする

l = ['d', 'b', 'c', 'a']
l.sort()
print(l) # ['a', 'b', 'c', 'd']

ソート順序を逆順にする

l = ['d', 'b', 'c', 'a']
l.sort(reverse=True)
print(l) # ['d', 'c', 'b', 'a']

大文字、小文字を区別せずにソートする

l = ['bc', 'ac', 'bD', 'AB']
l.sort(key=str.lower)
print(l) # ['AB', 'ac', 'bc', 'bD']

いずれのサンプルでも、もともと初期化したリストがソートされて破壊的に更新されたことが確認できます。