元のリストを並べ替えるのが list.sort()、並べ替えた新しいリストを返すのが sorted() です。 sort() の戻り値は None。result = data.sort() と書いても、result に並べ替え済みのリストは入りません。
この違いは、受付順を残して「所要時間順の一覧」を別に作るときに重要です。本記事では架空の提出物を使い、元データ・戻り値・同じ時間の項目の順序を6問で確かめます。英語の公式仕様は、実行結果を説明するために必要な短い箇所だけ読みます。
対象は、Pythonのリスト・代入・print() を一度使った方です。学習時間の目安は25〜35分です(編集上の目安で、学習実測ではありません)。Python環境がなくても、紙に結果を予想して解答と比べられます。
sortとsortedの違いは、元データと戻り値で見る
| 観察すること | data.sort() |
sorted(data) |
|---|---|---|
| 元のリスト | そのリスト自体を並べ替える | 元の並びを保つ |
| 戻り値 | None |
並べ替えた新しいリスト |
| 同じキーの項目 | 元の相対順を保つ | 元の相対順を保つ |
| 使う場面 | 元の順序が不要なとき | 元の順序と並べ替えた順序の両方が必要なとき |
ここでの「元の並びを保つ」は、この教材の数値やタプルと、データを書き換えない key 関数を使う場合の説明です。sorted() が新しいリストを作ることは、入れ子のオブジェクトまで丸ごと複製するという意味ではありません。

sort() はリストのメソッドです。sorted() はタプルなどの反復可能なオブジェクトも受け取れますが、返すのはリストです。本記事は両者を比べやすいよう、入力をリストにそろえます。
公式英語を、実行前の予想に結び付ける
読む順番は「予想する→実行する→仕様のどの語と一致したか確認する」です。英文全体を訳す前に、次の3点へ線を引くつもりで読みましょう。
- Sorting Basics の
in-place
:対象のリストそのものを変更する。 - 同じ節の
returns None
:呼び出しの戻り値はNone。並べ替え後のリストとは別に考える。 - sorted() の仕様の
new sorted list
:並べ替えた新しいリストを返す。
None は「ここにはリストなどの結果が返されていない」ことを表す値です。空リスト [] や文字列 "None" とは別物です。このメソッドで None が返ったこと自体は、失敗を示しません。
全問、入力を最初から作り直してください。 前の問で変更した変数をそのまま使うと、「元の順番」の観察ができなくなります。下のコードは各問を単独で実行できます。
問1:sortedの結果を別の変数に入れる
2つの print() は何を表示しますか。「元のリスト」と「戻り値」を分けて書いてから実行しましょう。
durations = [25, 10, 25, 5]
result = sorted(durations)
print("original:", durations)
print("return:", result)
問1の解答と仕様の照合
original: [25, 10, 25, 5]
return: [5, 10, 25, 25]
元の durations は受付順のままで、新しいリストが result に入ります。仕様の new sorted list
と一致するのは戻り値のほうです。元順も表示したい画面や、後から受付順に戻したい処理に向いています。
問2:sortの結果を別の変数に入れる
入力は問1と同じです。変更したのは2行目だけですが、2つの観察結果はどう変わるでしょうか。
durations = [25, 10, 25, 5]
result = durations.sort()
print("original:", durations)
print("return:", result)
問2の解答と仕様の照合
original: [5, 10, 25, 25]
return: None
durations 自体が並べ替わる点が in-place
、result が None になる点が returns None
に対応します。処理は成功しています。result だけを見て「並べ替えに失敗した」と判断しないことが大切です。
list.sort() の公式仕様でも、変更は元のリストへ作用し、並べ替えたリストを戻り値として返さないことを確認できます。
問1と問2の実行結果は、それぞれの解答欄に掲載しています。元のリストと戻り値を別々に照合してください。
問3:durations = durations.sort() を直す
次は、よくある取り違えを再現したコードです。実行後の durations を予想し、「受付順を残す」「残さなくてよい」の2つの要件ごとに直してください。
durations = [25, 10, 25, 5]
durations = durations.sort()
print(durations)
問3の解答と、要件ごとの直し方
出力は None です。代入では右辺が先に評価されるため、まずリストを並べ替え、その戻り値の None を左辺の名前 durations に代入します。この1行だけでは例外は出ません。
受付順を残すなら、初期値からやり直して、別名へ受け取ります。
durations = [25, 10, 25, 5]
ordered = sorted(durations)
print(durations) # [25, 10, 25, 5]
print(ordered) # [5, 10, 25, 25]
受付順を残す必要がないなら、代入せずに呼び出します。
durations = [25, 10, 25, 5]
durations.sort()
print(durations) # [5, 10, 25, 25]
すでに durations が None になった後で sorted(durations) に変えても直りません。None は並べ替えの入力にできないためです。初期データを作り直すところまでが修正です。
受付順を残して、所要時間順の別一覧を作る
ここからは、架空の提出物4件を使います。タプルの1番目が受付ID、2番目が所要時間(分)です。R1 と R3 はどちらも25分ですが、別の提出物です。
jobs = [('R1', 25), ('R2', 10), ('R3', 25), ('R4', 5)]
key=lambda item: item[1] は「各項目の2番目の値を取り出し、それを比較に使う」という指定です。Pythonの添字は0から始まるため、item[1] が分数になります。ここでID順を追加条件にはしていません。
元順を残すなら、どちらを選ぶ?
要件は「受付順の jobs を残し、短い時間から並べた ordered も作る」です。sort() と sorted() のどちらを使いますか。jobs と ordered のID順を両方予想してください。
jobs = [('R1', 25), ('R2', 10), ('R3', 25), ('R4', 5)]
ordered = sorted(jobs, key=lambda item: item[1])
print("original:", jobs)
print("ordered:", ordered)
問4の解答と仕様の照合
original: [('R1', 25), ('R2', 10), ('R3', 25), ('R4', 5)]
ordered: [('R4', 5), ('R2', 10), ('R1', 25), ('R3', 25)]
この要件では sorted() を選びます。ID順は、元の一覧が R1→R2→R3→R4、並べ替えた一覧が R4→R2→R1→R3 です。同じ25分の項目は、受付時と同じ R1→R3 の順になっています。
これはIDが小さい順に整列したからではありません。次の節で、同じキーの順序についての仕様を確認します。
stableは「同じキーの項目の順序」で確かめる
Pythonの sort() と sorted() は、どちらも安定したソートです。公式資料の安定性の節にある stable
は、同じ比較キーを持つ項目の相対順を保つ、という意味です。
「全項目が元の場所にとどまる」という意味ではありません。R1とR3は一覧の後ろへ移っても、R1が先、R3が後という関係を保ちます。キーは今回、項目全体でもIDでもなく「所要時間」です。

reverse=Trueなら、同じ25分の2件も逆になる?
受付順の入力から、所要時間の長い順に並べます。R1とR3の前後関係も逆になるでしょうか。先にID順を書いてから実行してください。
jobs = [('R1', 25), ('R2', 10), ('R3', 25), ('R4', 5)]
ordered = sorted(jobs, key=lambda item: item[1], reverse=True)
print("original:", jobs)
print("ordered:", ordered)
問5の解答と、一覧を逆転する操作との違い
original: [('R1', 25), ('R2', 10), ('R3', 25), ('R4', 5)]
ordered: [('R1', 25), ('R3', 25), ('R2', 10), ('R4', 5)]
ID順は R1→R3→R2→R4 です。降順でも安定性が保たれるため、同じ25分の R1→R3 は変わりません。公式資料の Odds and Endsでも、reverse を指定した場合の安定性を確認できます。
一方、昇順の一覧を作ってから全体を逆転すると、同じ25分の2件も入れ替わります。
jobs = [('R1', 25), ('R2', 10), ('R3', 25), ('R4', 5)]
ascending = sorted(jobs, key=lambda item: item[1])
flipped = list(reversed(ascending))
print(flipped)
# [('R3', 25), ('R1', 25), ('R2', 10), ('R4', 5)]
reverse=True は「降順にソートする指定」、reversed() は「今の並びを後ろからたどる操作」です。同じキーがあると、結果の違いが見えます。
空リストでも、戻り値まで確かめる
問6:空ならsortとsortedは同じ結果になる?
次の4行の出力を予想してください。空のため並び順は変わりませんが、「元のリスト」と「戻り値」を分ける習慣は同じです。
first = []
from_sorted = sorted(first)
second = []
from_sort = second.sort()
print("sorted original:", first)
print("sorted return:", from_sorted)
print("sort original:", second)
print("sort return:", from_sort)
問6の解答と仕様の照合
sorted original: []
sorted return: []
sort original: []
sort return: None
元のリストはどちらも [] です。ただし、sorted() は新しい空リストを返し、sort() は None を返します。入力が空でも、それぞれの戻り値の仕様は変わりません。
選択理由を2文で残し、別の入力でも確かめる
問4で選んだ処理を、元順と同順位の2点に絞って説明してみましょう。次は編集部作成の説明例です。英文の暗記より、コードの動作と一致することを優先します。
I used sorted() to keep the original order. Items with the same duration keep their relative order.
「元の順序を残すために sorted() を使いました。同じ所要時間の項目は、互いの前後関係を保ちます」という意味です。初回は日本語で説明し、対応する仕様の短句を指すだけでも構いません。
仕上げに、入力を [('B', 8), ('A', 8), ('C', 3)] へ変更してみてください。同じ8分がB→Aの順なので、昇順は C→B→A、降順は B→A→C です。A→Bに並べ直されると予想したなら、「安定性」を「ID順」と取り違えていないか見直しましょう。
任意の確認:編集部が検証用に作った架空の説明 “sort returns the sorted list” は、どこが仕様と違うでしょうか。実際のAIサービスの回答を引用したものではありません。問2の戻り値と公式資料を根拠に、“sort() returns None.” と直せれば十分です。AIの登録・利用は必要ありません。
学習の確認点:①元のリストと戻り値を分けて予想できる、②元順を残す要件で sorted() を選べる、③同じキーの順序が降順でも保たれると説明できる。この3点を、実行結果と公式仕様の両方で確かめてください。
6問の教材と実行方法
Python実習セットをダウンロード(ZIP)すると、6問のコード、解答、予測・記録用PDF、実行手順、確認用テストをまとめて利用できます。実習用の exercise.py は標準ライブラリのみで動き、外部通信やデータファイルへの書き込みを行いません。
- 予測・実行ワークシート(PDF):問題ページに予想を書き、実行後に結果を記録します。後半に解答があります。
- 6問の解答と仕様リンク(TXT):表示結果と、仕様の対応を確認できます。
ZIPを展開し、exercise.py があるフォルダーで次を実行します。コマンド名は環境によって異なります。WindowsのPythonランチャーを使う場合は、先頭の python3 を py に置き換えてください。
python3 --version
python3 -B exercise.py --case 1
python3 -B exercise.py --case all
最初は問1だけを予想してから実行し、答え合わせが終わってから次の問へ進むと、結果を先に見ずに練習できます。全問の動作を確かめるテストは python3 -B -m unittest -v で実行できます。
出典・検証環境と、次に学ぶ内容
参照日は2026年10月8日です。参照した英語公式ページの表示版は Python 3.14.8、制作時のコード実行環境は Python 3.12.14 です。資料の表示版と実行版を分けて記載しています。公式の /3/ ページは更新されるため、読んだ時点で版も確認してください。
- Python公式:Sorting Basics(元のリストと戻り値)
- Python公式:list.sort()(その場での変更・安定性)
- Python公式:sorted()(新しいリスト・key・reverse)
- Python公式:Sort Stability and Complex Sorts(同じキーの相対順)
- Python公式:Odds and Ends(降順でも保たれる安定性)
本記事の入力データ・問題・説明例は学習用の架空例です。実在の受講生や業務データは使っていません。混在する型やNaN、比較処理の例外、速度比較、多段ソートは今回の練習範囲に含めていません。
基本文法をまとめて練習したい方は、Python問題集と練習問題10問へ。問題8では sorted() と条件による絞り込みを扱っています。仕様ページの探し方から確認したい方には、英語の公式ドキュメントを読む5手順が役立ちます。別の処理を動かして学ぶ場合は、Pythonサンプルコード20選も参考にしてください。
英語でIT・AIを学べるKredo
英語×IT・AIのスキルを身につけてグローバルに活躍しませんか?
当メディアを運営しているKredoは、英語×ITをオンラインで学ぶ「Kredoオンラインキャンプ」と、フィリピンのセブ島で英語とIT・AIを学ぶ「KredoIT留学」「KredoAI留学」を提供しています。これまでの卒業生は3,000名以上。卒業生の多くが、国内外のIT企業への転職、フリーランスなどへのキャリアチェンジを実現しています。これからの時代に必要な英語×IT・AIのスキルを身につけてグローバルに活躍しませんか?









