﻿Pythonのsortとsorted: 6問の解答
制作日: 2026-10-08 UTC
この教材は架空の入力を使う編集部独自の演習です。

【問1】result = sorted(durations)
実行前: [25, 10, 25, 5]
元リスト durations: [25, 10, 25, 5]
戻り値 result: [5, 10, 25, 25]
result is durations: False
元リストの順序はそのままで、新しいリストが返ります。
「新しいリスト」は入れ子まで完全に複製するという意味ではありません。

【問2】result = durations.sort()
毎回、新しい入力 [25, 10, 25, 5] から始めます。
元リスト durations: [5, 10, 25, 25]
戻り値 result: None
元のリスト自体が変わります。sort()は並べ替えたリストを返しません。
Noneだけを見て「処理に失敗した」と決めないでください。

【問3】durations = durations.sort() を直す
意図的な失敗例: 代入後の変数 durations は None になります。
この代入自体は例外を発生させません。右辺で元のリストが並べ替えられ、
その戻り値 None が左辺の変数へ代入されます。
観察用の別名 original_alias が指す元のリスト: [5, 10, 25, 25]

修正A: 受付順を残したい
  durations = [25, 10, 25, 5]
  ordered = sorted(durations)
  durations: [25, 10, 25, 5]
  ordered:   [5, 10, 25, 25]

修正B: 元順を残す必要がない
  durations = [25, 10, 25, 5]
  durations.sort()
  durations: [5, 10, 25, 25]

失敗後の None をそのまま修正例に渡さず、新しい入力からやり直します。
sort()を使ってはいけないのではなく、必要な元順と戻り値で選びます。

【問4】受付順を残して、所要時間の短い順の別一覧を作る
  ordered = sorted(jobs, key=lambda item: item[1])
元のjobs: [('R1', 25), ('R2', 10), ('R3', 25), ('R4', 5)]
ordered: [('R4', 5), ('R2', 10), ('R1', 25), ('R3', 25)]
元のID順: R1 → R2 → R3 → R4
結果ID順: R4 → R2 → R1 → R3
item[1]はタプルの2番目、所要時間です。25分はR1 → R3を保ちます。

【問5】reverse=True と昇順結果の全体反転
昇順:                       R4 → R2 → R1 → R3
sorted(..., reverse=True):  R1 → R3 → R2 → R4
list(reversed(昇順結果)):   R3 → R1 → R2 → R4
降順でも同じキーの相対順は保たれます。25分はR1 → R3のままです。
昇順結果を全体反転すると、同じキー同士も反転します。

「IDの小さい順だからR1が先」と説明するのは不十分です。
追加確認用: [('Z9', 25), ('A1', 25), ('X4', 5), ('B2', 25), ('C3', 10)]
所要時間だけをキーにした昇順: X4 → C3 → Z9 → A1 → B2
同じキーのZ9 → A1 → B2は、入力内での順序を保ちます。
この追加確認はテストに含みます。主問題の6問には数えません。

【問6】独立した空リストを2方式へ渡す
sorted([]): 元リスト [] / 戻り値 [] / 戻り値は新しいリスト
[].sort():  元リスト [] / 戻り値 None
値が空でも、戻り値が同じになるわけではありません。

【英語2文の完成例】
I used sorted() to keep the original order.
Items with the same duration keep their relative order.

採点するポイント:
- 受付順を残すのは元のjobsで、別一覧orderedは所要時間順になる
- 同じ所要時間の中で保たれるのは入力内の相対順
- 元順を残す必要があるためsorted()を選んだと説明できる
初回は日本語の説明と、対応する公式仕様の短い語句の指摘でも構いません。

【任意の検証問題】
編集部が作成した架空のAI説明: sort returns the sorted list
誤りはreturns the sorted list。list.sort()の戻り値はNoneです。
特定のAIモデルが実際に誤答した記録ではありません。

【公式資料】
Python Sorting HOWTO: Sorting Basics
https://docs.python.org/3/howto/sorting.html#sorting-basics
Python list.sort
https://docs.python.org/3/library/stdtypes.html#list.sort
Python sorted
https://docs.python.org/3/library/functions.html#sorted
Python Sorting HOWTO: Sort Stability and Complex Sorts
https://docs.python.org/3/howto/sorting.html#sort-stability-and-complex-sorts

本教材の「元順が残る」の説明は、単純な数値・文字列を含むデータと、
入力を書き換えないkeyを前提にしています。制作時はPython 3.12.14で15テストを実行しました。
