Pythonでリストをソートするsortとsortedの違い

Pythonでリストを昇順または降順にソートするにはsort()とsorted()の2つの方法があります。文字列やタプルをソートしたい場合はsorted()を使います。 ここでは以下の内容について説明します。

リスト型のメソッドsort(): 元のリストをソート 組み込み関数sorted(): ソートした新たなリストを生成

文字列、タプルをソートする方法

昇順・降順にソートするのではなく要素を逆順に並べ替えたりランダムにシャッフルしたい場合は

また、sort(), sorted()にはここでは説明していない引数keyがあります。引数keyを活用した例は

リスト型のメソッド sort(): 元のリストをソート sort()はリスト型のメソッド。

4. 組み込み型 — Python 3.6.1 ドキュメント

元のリスト自体が書き換えられる破壊的処理。

org_list = [3, 1, 4, 5, 2]

org_list.sort()
print(org_list)
# [1, 2, 3, 4, 5]

sort()が返すのはNoneなので気をつけてください。

print(org_list.sort())
# None

デフォルトは昇順。降順にソートしたい場合は引数reverseをTrueとします。

org_list.sort(reverse=True)
print(org_list)
# [5, 4, 3, 2, 1]

組み込み関数 sorted(): ソートした新たなリストを生成 sorted()は組み込み関数。

2. 組み込み関数 sorted() — Python 3.6.1 ドキュメント

引数にソートしたいリストを指定するとソートされたリストを返します。元のリストは変更されない非破壊的処理。

org_list = [3, 1, 4, 5, 2]

new_list = sorted(org_list)
print(org_list)
print(new_list)
# [3, 1, 4, 5, 2]
# [1, 2, 3, 4, 5]

sort()と同様にデフォルトは昇順。降順にソートしたい場合は引数reverseをTrueとする

new_list_reverse = sorted(org_list, reverse=True)
print(org_list)
print(new_list_reverse)
# [3, 1, 4, 5, 2]
# [5, 4, 3, 2, 1]

文字列、タプルをソートする方法

文字列、タプルはイミュータブル(更新不可)なので、元のオブジェクトを書き換えるsort()メソッドは用意されていません。 一方、ソートしたリストを新たなオブジェクトとして生成するsorted()関数の引数にはリストだけでなく文字列やタプルも指定できます。ただし、sorted()が返すのはリストなので、文字列やタプルに変換する処理が必要となります。 文字列のソート sorted()関数の引数に文字列を指定すると、ソートされた文字列の一文字ずつが要素として格納されたリストが返されます。

org_str = 'cebad'

new_str_list = sorted(org_str)
print(org_str)
print(new_str_list)
# cebad
# ['a', 'b', 'c', 'd', 'e']

文字列のリストを連結して一つの文字列にするにはjoin()メソッドを使います。

new_str = ''.join(new_str_list)
print(new_str)
# abcde

まとめて書いても問題ありません。降順にソートしたい場合は引数reverseをTrueとします。

new_str = ''.join(sorted(org_str))
print(new_str)
# abcde

new_str_reverse = ''.join(sorted(org_str, reverse=True))
print(new_str_reverse)
# edcba

タプルのソート

タプルについても文字列と同じです。sorted()関数の引数にタプルを指定すると、要素がソートされたリストが返されます。

org_tuple = (3, 1, 4, 5, 2)

new_tuple_list = sorted(org_tuple)
print(org_tuple)
print(new_tuple_list)
# (3, 1, 4, 5, 2)
# [1, 2, 3, 4, 5]

リストからタプルへの変換はtuple()を使います。

new_tuple = tuple(new_tuple_list)
print(new_tuple)
# (1, 2, 3, 4, 5)

まとめて書いても問題ありません。降順にソートしたい場合は引数reverseをTrueとします。

new_tuple = tuple(sorted(new_tuple_list))
print(new_tuple)
# (1, 2, 3, 4, 5)

new_tuple_reverse = tuple(sorted(new_tuple_list, reverse=True))
print(new_tuple_reverse)
# (5, 4, 3, 2, 1)
Last Updated: 6/26/2019, 10:34:03 PM