Pythonでリスト・タプル・文字列をソートする方法(sort, sorted)

Pythonのsortメソッド、sorted関数について解説します。

Pythonでリスト・タプル・文字列をソートする方法(sort, sorted)

Pythonでリスト・タプル・文字列を昇順もしくは降順にソートする方法について解説します。

リスト・タプル・文字列の要素を逆順に並べ替えたり、ランダムにシャッフルしたい場合には、以下の記事を参考にしてください。

リストの要素を昇順・降順にソートする

Pythonのリストの要素をソートするには、以下の2つの方法があります。

  • リスト型のsort()メソッドを使う方法(元のリストをソートする)
  • 組み込み関数sorted()を使う方法(新しいリストを作成する)

ポイントは、新しいリストができるかどうかという点です。

リスト型のsort()メソッドを使う(元のリストをソートする)

Pythonのリスト型のメソッドには、リストの要素をソートするsort()メソッドあります。これは元のリスト自体をソートするもので、破壊的処理(元の要素を書き換える処理)になります。

デフォルトでは昇順に並べ替えられ、降順にソートするにはreverse=Trueを引数に指定します。

sort()メソッド自体の戻り値はNoneです。

# リスト型のsort()メソッド

# 昇順で並べ替え(デフォルト)
unordered_list = [2, 4, 5, 3, 1]
unordered_list.sort() # 元のリストが書き換えられる
print(unordered_list)
# [1, 2, 3, 4, 5]


# 降順で並べ替え(reverse=Trueを指定)
unordered_list = [2, 4, 5, 3, 1]
unordered_list.sort(reverse=True)
print(unordered_list)
# [5, 4, 3, 2, 1]


# 戻り値はNone
returned_value = unordered_list.sort()
print(returned_value)
# None

組み込み関数sorted()を使う(新しいリストを作成する)

Pythonの組み込み関数として、sorted()関数があります。ソートしたいリストを引数として渡すと、ソートされた新しいリストを戻り値として返します。

これはリスト型のsort()メソッドと違って、元のリストの順序は変えず、新しいリストを作成するため、非破壊的処理(元の要素は書き換えない処理)になります。

デフォルトでは昇順に並べ替えられ、降順にソートするにはreverse=Trueを引数に指定します。

# 組み込み関数sorted()

# 昇順で並べ替え(デフォルト)
unordered_list = [2, 4, 5, 3, 1]
ordered_list = sorted(unordered_list)
print(ordered_list)
# [1, 2, 3, 4, 5]

print(unordered_list) # 元のリストは変わらない
# [2, 4, 5, 3, 1]


# 降順で並べ替え(reverse=Trueを指定)
unordered_list = [2, 4, 5, 3, 1]
ordered_list = sorted(unordered_list, reverse=True)
print(ordered_list)
# [5, 4, 3, 2, 1]

タプルの要素をソートする(sorted)

タプルの要素をソートするには、リストと同様にsorted()関数を使います。

タプルはイミュータブル(変更不可)なオブジェクトなため、リストのsort()メソッドのように元のオブジェクト自体に変更を加えるメソッドは用意されていません

sorted()関数の戻り値はリスト型になるため、それをtuple()関数でタプルに変換します。

# タプルをソートする

# 昇順で並べ替え(デフォルト)
unordered_tuple = (2, 4, 5, 3, 1)
ordered_tuple = tuple(sorted(unordered_tuple))
print(ordered_tuple)
# (1, 2, 3, 4, 5)

print(unordered_tuple) # 元のタプルは変わらない
# (2, 4, 5, 3, 1)


# 降順で並べ替え(reverse=Trueを指定)
unordered_tuple = (2, 4, 5, 3, 1)
ordered_tuple = tuple(sorted(unordered_tuple, reverse=True))
print(ordered_tuple)
# (5, 4, 3, 2, 1)

文字列の要素をソートする(sorted)

Pythonの文字列もイミュータブル(変更不可)なオブジェクトです。文字列をソートする場合もsorted()関数を使います。

文字列にsorted()関数を使うと、一つ一つの文字がソートされた状態で格納されたリストを返します。それらをjoin()関数で連結して一つの文字列に戻します。

文字列を連結する方法については、以下の記事を参考にしてください。

# sorted関数で文字列をソートする

# 文字列にsorted関数を使うと、
# ソートされた文字のリストを返す
unordered_str = "いえおうあ"
ordered_str_list = sorted(unordered_str)
print(ordered_str_list)
# ['あ', 'い', 'う', 'え', 'お']

# リストの要素をjoin関数で文字列として連結する
ordered_str = ''.join(ordered_str_list)
print(ordered_str)
# あいうえお


# 降順でソートするにはreverse=Trueにする
unordered_str = "いえおうあ"
ordered_str_reverse = ''.join(sorted(unordered_str, reverse=True))
print(ordered_str_reverse)
# おえういあ