note.nkmk.me

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

Date: 2017-09-03 / Modified: 2018-09-07 / tags: Python, リスト

Pythonでリストを昇順または降順にソートするにはsort()sorted()の2つの方法がある。文字列やタプルをソートしたい場合はsorted()を使う。

ここでは以下の内容について説明する。

  • リスト型のメソッドsort(): 元のリストをソート
  • 組み込み関数sorted(): ソートした新たなリストを生成
  • 文字列、タプルをソートする方法

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

また、sort(), sorted()にはここでは説明していない引数keyがある。引数keyを活用した例は以下の記事を参照。

スポンサーリンク

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

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

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

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

デフォルトは昇順。降順にソートしたい場合は引数reverseTrueとする。

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

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

sorted()は組み込み関数。

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

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()と同様にデフォルトは昇順。降順にソートしたい場合は引数reverseTrueとする

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

まとめて書いてもOK。降順にソートしたい場合は引数reverseTrueとする。

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)

まとめて書いてもOK。降順にソートしたい場合は引数reverseTrueとする。

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)
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事