list.reverse の概要(リストの順序をその場で逆にする)
list.reverse は、リストの要素順を“その場で”逆順に並べ替えるメソッドです。元のリストが直接変更され、戻り値は None です。新しいリストは作られないため、メモリ効率がよく、意図が明確です。
nums = [1, 2, 3, 4, 5]
nums.reverse()
print(nums) # [5, 4, 3, 2, 1]
Python基本動作と戻り値(ここが重要)
インプレースで反転する
reverse は元のリストを直接変更します。呼び出し直後から、変数が指すリストの内容は逆順になっています。副作用があるため、元の順序を保持したい場合は注意してください。
items = ["A", "B", "C"]
items.reverse()
print(items) # ["C", "B", "A"]
Python戻り値は None(チェーン不可)
reverse は結果を返しません。戻り値に代入したり、メソッドチェーンの一部にすると意図が崩れます。
x = [1, 2, 3]
r = x.reverse()
print(r) # None
print(x) # [3, 2, 1]
Pythonreversed() やスライスとの違い(重要ポイントを深掘り)
reversed() は“元を変えず”逆順イテレータを返す
元のリストを保ちたい場合や、一時的に逆順で走査したい場合は reversed() が適切です。必要なら list(…) で展開します。
nums = [1, 2, 3]
for n in reversed(nums): # 走査のみ
print(n)
print(nums) # [1, 2, 3](変更なし)
rev_list = list(reversed(nums))
print(rev_list) # [3, 2, 1]
Pythonスライス [::-1] は“新しい逆順リスト”を作る
元を残しつつ、逆順の“コピー”が欲しいときはスライスが簡潔です。
a = [1, 2, 3]
b = a[::-1] # 逆順コピー
print(a, b) # [1, 2, 3] [3, 2, 1]
Python目的が「元を変える/変えない」「イテレートだけ/新しいリストが必要」によって、reverse・reversed・スライスを使い分けるのがコツです。
実務での使いどころと具体例
履歴やログの最新順表示
履歴を末尾に積む設計なら、表示時に逆順へ反転すると“最新が先頭”になります。
logs = ["start", "load", "run"]
logs.reverse()
print(logs) # ["run", "load", "start"]
Pythonソート後に“降順へ”ひっくり返す簡便手段
降順がほしいが複雑な key 指定が不要なら、昇順ソート→reverse の2段でシンプルに書けます(ただし list.sort(reverse=True) のほうが一手で済みます)。
nums = [5, 2, 9, 1]
nums.sort()
nums.reverse()
print(nums) # [9, 5, 2, 1]
Pythonスタック風の処理を見やすく並べ替える
後入れ先出し(LIFO)データを可視化したいとき、reverse で論理順(先頭が“上”)へ整えると、デバッグや表示が直感的になります。
stack = ["task1", "task2", "task3"]
stack.reverse()
print(stack) # ["task3", "task2", "task1"]
Python落とし穴と安全策(初心者がつまずきやすい点)
“元が変わる”ことに注意
reverse は破壊的です。元の順序が必要なら、先にコピーを取りましょう。
a = [1, 2, 3]
b = a[:] # または a.copy()
b.reverse()
print(a, b) # [1, 2, 3] [3, 2, 1]
Python文字列には reverse がない
文字列は不変です。逆順を得たいならスライスや reversed と join を使います。
s = "Python"
print(s[::-1]) # "nohtyP"
print("".join(reversed(s))) # "nohtyP"
Pythonメソッドチェーンはできない
戻り値が None のため、reverse().append(…) といったチェーンは使えません。行を分けて書くほうが読みやすく安全です。
例題で身につける(目的別の選択肢まで示す)
例題1:元を変えて良いなら reverse 一発
nums = [1, 2, 3, 4, 5]
nums.reverse()
print(nums) # [5, 4, 3, 2, 1]
Python例題2:元を保ちたいなら reversed
nums = [1, 2, 3]
rev = list(reversed(nums))
print(nums, rev) # [1, 2, 3] [3, 2, 1]
Python例題3:逆順コピーが欲しいならスライス
a = [10, 20, 30]
b = a[::-1]
print(b) # [30, 20, 10]
Python例題4:二次元データの表示順を反転
rows = [
["coffee", 350, 2],
["tea", 280, 1],
["juice", 220, 3],
]
rows.reverse() # 最新行を先頭に
for item, price, qty in rows:
print(item, price, qty)
Pythonまとめ
list.reverse は「リストをその場で逆順にする」ための最短手段です。戻り値は None、元のリストが変更されるため、順序を保持したい場面では reversed() や [::-1] を選びます。目的が「元を変える/変えない」「走査だけ/新しいリストが必要」によって適切な手法が異なります。この使い分けを押さえると、逆順処理をシンプルかつ安全に書けます。
