Pythonでリストの中身を「小さい順に並べたい」「点数の高い順にランキングを作りたい」と思ったことはありませんか?そんなときに使うのが sort と sorted です。名前がそっくりなので、初心者の方は「どっちを使えばいいの?」と迷いがちですよね。
この記事では、Pythonの sort メソッドと sorted 関数の違いから、基本的な使い方、降順での並び替え、key 引数を使った応用テクニックまで、初心者の方にも分かりやすく丁寧に解説します。読み終えるころには、リストの並び替えを自由自在に扱えるようになっているはずです。
コンテンツ
sortとsortedの違いをまず押さえよう
どちらも「並び替え(ソート)」を行うものですが、いちばん大きな違いは元のデータを書き換えるかどうかです。
list.sort():リスト自身を並び替える(元のリストが変わる)。戻り値はNone。sorted(リスト):並び替えた新しいリストを返す(元のリストはそのまま)。
「元のデータを残しておきたいなら sorted」「元のリストをそのまま並び替えてしまってよいなら sort」と覚えておくと迷いません。それぞれ詳しく見ていきましょう。
list.sort()の使い方
基本:小さい順(昇順)に並び替える
sort() はリストが持つメソッドなので、リスト.sort() の形で呼び出します。引数を指定しなければ、数値は小さい順(昇順)に並び替えられます。
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort()
print(numbers)
# 実行結果: [1, 1, 2, 3, 4, 5, 6, 9]ここで注意したいのが、sort() の戻り値は None だという点です。new = numbers.sort() のように書いても new には None が入ってしまうので、結果を変数に代入しないよう気をつけましょう。
降順(大きい順)に並び替える
大きい順に並べたいときは、reverse=True を指定します。
scores = [55, 90, 73, 12, 88]
scores.sort(reverse=True)
print(scores)
# 実行結果: [90, 88, 73, 55, 12]sorted()の使い方
基本:元のリストを変えずに並び替える
sorted() は組み込み関数なので、sorted(リスト) の形で使います。並び替えた結果を新しいリストとして返し、元のリストはそのまま残るのが特徴です。
original = [3, 1, 2]
result = sorted(original)
print(result) # [1, 2, 3]
print(original) # [3, 1, 2] ← 元のリストはそのまま元のデータを保持したまま、並び替えたバージョンも欲しい——そんな場面では sorted() がぴったりです。なお sorted() も reverse=True で降順にできます。
ちなみに、リストを加工して新しいリストを作る方法としてはリスト内包表記もよく使われます。並び替えと組み合わせると、より柔軟にデータを処理できるので、あわせて読んでみてください。
key引数で並び替えの基準を自由に決める
sort() も sorted() も、key 引数を指定することで「何を基準に並び替えるか」を自由に決められます。たとえば文字列を「長さ順」に並べたいときは、key=len と書きます。
words = ["banana", "apple", "fig", "cherry"]
sorted_words = sorted(words, key=len)
print(sorted_words)
# 実行結果: ['fig', 'apple', 'banana', 'cherry']さらに key に無名関数(ラムダ式)を渡せば、もっと細かい基準を指定できます。次の例は、(名前, 点数) のタプルのリストを「点数の高い順」に並び替えています。
students = [("佐藤", 80), ("鈴木", 65), ("田中", 92)]
students.sort(key=lambda x: x[1], reverse=True)
print(students)
# 実行結果: [('田中', 92), ('佐藤', 80), ('鈴木', 65)]lambda x: x[1] は「各要素の2番目(インデックス1)の値を基準にする」という意味です。ラムダ式そのものについてはラムダ式(無名関数)の解説記事でくわしく説明しているので、まだ自信がない方はこちらもチェックしてみてください。
辞書を並び替える
辞書(dict)そのものは順番を並び替えるというより、items() で取り出した「キーと値のペア」を sorted() で並び替えるのが定番です。次の例は、科目ごとの点数を「点数の高い順」にランキング化しています。
scores = {"math": 80, "english": 95, "science": 70}
ranking = sorted(scores.items(), key=lambda x: x[1], reverse=True)
print(ranking)
# 実行結果: [('english', 95), ('math', 80), ('science', 70)]辞書の作り方やループ処理の基本をおさらいしたい方は、辞書(dict)の使い方を徹底解説した記事もあわせてどうぞ。items() の動きが分かると、上のコードがぐっと理解しやすくなります。
よくあるエラーと注意点
初心者がつまずきやすいのが、異なる型が混ざったリストを並び替えようとするケースです。数値と文字列が混在していると、比較できずにエラーになります。
mixed = [1, "2", 3]
mixed.sort()
# TypeError: '<' not supported between instances of 'str' and 'int'このエラーが出たときは、リストの中身の型がそろっているかを確認しましょう。数値として並べたいなら int() で数値に変換する、といった前処理が必要です。
もっと効率的にPythonを学びたい人へ
sort や sorted のように「使えると便利だけど、独学だと細かい使い分けでつまずきやすい」機能はたくさんあります。本やネットの情報だけで進めていると、エラーの原因が分からず時間だけが過ぎてしまう……というのは、未経験からPythonを学ぶ多くの人が経験する壁です。
もし「誰かに直接質問しながら、最短でPythonを身につけたい」と感じているなら、マンツーマン指導が受けられるプログラミングスクールを検討してみるのも一つの手です。未経験からのPython習得や転職サポートに対応しているスクールも多く、無料カウンセリングで自分に合うか相談できるので、まずは気軽に話を聞いてみるとよいでしょう。
※本記事には広告(アフィリエイトリンク)を含みます。
Pythonプログラミング|マンツーマンレッスンで初めてをプロに育てる【Python Winner】![]()
まとめ
今回は、Pythonの sort と sorted の違いと使い方を解説しました。最後に要点を振り返っておきましょう。
list.sort()は元のリストを直接並び替える(戻り値はNone)。sorted(リスト)は元のリストを変えず、並び替えた新しいリストを返す。- 降順にしたいときは、どちらも
reverse=Trueを指定する。 key引数(特にlambda)を使えば、長さ順・点数順など好きな基準で並び替えられる。- 異なる型が混ざったリストはソートできず
TypeErrorになるので注意する。
並び替えはデータ処理の基本中の基本です。sort と sorted を使い分けられるようになると、Pythonでできることがぐっと広がります。ぜひ手を動かして試してみてくださいね。
ナノトイラボ 