Python | データ構造:list.reverse

Python
スポンサーリンク

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]
Python

reversed() やスライスとの違い(重要ポイントを深掘り)

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] を選びます。目的が「元を変える/変えない」「走査だけ/新しいリストが必要」によって適切な手法が異なります。この使い分けを押さえると、逆順処理をシンプルかつ安全に書けます。

タイトルとURLをコピーしました