Python : sorted() は、イテラブル要素を並び替える関数である

TwitterFacebookHatena
  • 公開:2021-9-10
  • 更新:2023-10-26
  • 文章量:1749
  • Python

TL;DR

sort()は元のリストをソートするメソッドに対し、sorted() は、常に新しいオブジェクトで返す関数である。

sorted() のポイント

  • iterable の要素を並べ替えた新たなリストを返す
  • 結果は常に新しいオブジェクトで返される
  • 引数に不変な型も受け取ることができる
  • 戻り値は常にリストである
  • 文字と整数が混在するとエラーになるので引数に無名関数を使う
sorted(iterable, *, key=None, reverse=False)

sorted() - 組み込み関数 — Python 3.9.4 ドキュメント

sorted 関数 と sort メソッド の違い

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

  • 組み込み関数 sorted 関数
  • リスト自身が持つ sort メソッド

sort()は元のリストをソートするメソッドに対し、sorted() は、常に新しいオブジェクトで返す関数。

# sorted()
sorted(list型変数)

# sort()
list型変数.sort()

違いを比較してみる。sort()は元のリストも破壊的に変更されてしまうが、sorted()は元のリストは変更されない。

sort()

sort()によって元のリストは変更されてしまう。

# sort()
x = [8, 2, 7, 6, 1]

print(x) # 元のリストも破壊的に変更された
# [1, 2, 6, 7, 8]

sort()自体は None を返す。

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

y = x.sort()
print(y) # None
print(x) # [1, 2, 3, 4, 5]

sorted()

sorted()は元のリストは変更されない。

# sorted()
s = [8, 2, 7, 6, 1]

print(sorted(s))
# [1, 2, 6, 7, 8]

print(s) # 元のリストは変更されない
# [8, 2, 7, 6, 1]

絶対値で並べ替える

sorted()を使う場合、リストにマイナスが入ると、マイナス順に ソート されてしまう。絶対値でソートしたいときは、第二引数に key 引数を設定する。

sorted(イテラブル, key=abs)

マイナス値が入っている整数を並べ替えてみよう。

# リストにマイナスが入ると、マイナス順にソートされる

x = [1, -2, 3, -4]
x.sort()
print(x)

# [-4, -2, 1, 3]

# 絶対値でソートしたいときは、key引数を使う

y = [1, -2, 3, -4]
print(sorted(y, key=abs))

# [1, -2, 3, -4]

文字と整数をソート

文字と整数が混在するときは、エラーになるので、引数 key に無名関数を指定する。以下は lambda を key に入れている例。ソートされるときに、lambda に渡されるため、比較に利用する値を返す。

x = ['1', 2, '3', 4]
sorted(x, key=lambda v: int(v))

# sorted(リスト, 名前=lambda 引数: 式)
# ['1', 2, '3', 4]

逆順にソートする

逆順にソートしたいときは、reverse=True を使う。

x = [1, 3, 9, 2]
sorted(x, reverse=True)

# [9, 3, 2, 1]

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

関数を指定することもできる。key に関数 str.lower を指定すると要素が小文字に変換された後に、ソート結果が出力される。

x = ['d', 'B', 'a', 'c']
print(sorted(x)) # ['B', 'a', 'c', 'd']

y = ['d', 'B', 'a', 'c']
print(sorted(y, key=str.lower)) # ['a', 'B', 'c', 'd']

Python : sorted() は、イテラブル要素を並び替える関数である