AI資格ドリル
資格を選ぶ↓

用語比較

reverse()と reversed() の違い|None が返る理由と逆順の取り方(Python3基礎)

リストを逆順にする方法には、リストのメソッドの reverse()、組み込み関数の reversed()、スライスの [::-1] があります。

reverse() は元のリストを書き換えて None を返します。reversed() は元のリストを変えず、逆順に取り出すイテレータを返します。

このページは、reverse() の戻り値を使って None が出た人や、reversed() の結果が <list_reverseiterator ...> と表示されて戸惑った人向けです。決まりは、Python 公式ドキュメントの組み込み関数と組み込み型の項に書かれています。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

a.reverse()

リスト a を逆順に並べ替える(その場で変更)。戻り値は None。

reversed(a)

a を変えず、逆順のイテレータを返す。リストにするなら list() で包む。

a[::-1]

a を変えず、逆順の新しいリストを返す。

違いを表で確認

比較軸a.reverse()reversed(a)
元のリスト(a = [1, 2, 3])a.reverse():[3, 2, 1] に変わるreversed(a):[1, 2, 3] のまま
戻り値None<list_reverseiterator object ...>
リストとして受け取る方法a 自身が逆順になるlist(reversed(a)):[3, 2, 1]
文字列に使えるかstr には reverse() が無く AttributeErrorlist(reversed("abc")) は ['c', 'b', 'a']

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

reverse() の戻り値を変数に入れて None になった人

r = a.reverse() とすると、r は None です。逆順になるのは a 自身です。Python 3.9.6 では、a = [1, 2, 3] のあと r が None、a が [3, 2, 1] になりました。公式ドキュメントは、その場で変更するメソッドは副作用で動くことを示すために None を返すと説明しています。

02

reversed() を print して変な表示が出た人

reversed() が返すのはリストではなく、逆順のイテレータです。print すると <list_reverseiterator object at 0x...> のように表示されます。中身を見るには list() で包みます。

03

元のリストを残したまま、逆順のリストが欲しい人

list(reversed(a)) か a[::-1] を使います。どちらも元の a は [1, 2, 3] のままです。文字列の逆順も、s[::-1] なら 'cba' が得られます。

具体例で使い分ける

例 1

reverse() と reversed() の動き

a = [1, 2, 3] に a.reverse() を、b = [1, 2, 3] に reversed(b) を実行します。

  • 公式ドキュメントは、reverse() をシーケンスの要素をその場で逆順にするメソッドと説明しています。
  • reversed() は、逆順のイテレータを返す組み込み関数です。引数のシーケンスは変わりません。

結論: a.reverse() の戻り値は None で、a は [3, 2, 1] になります。reversed(b) はイテレータを返し、b は [1, 2, 3] のままです。list() で包むと [3, 2, 1] です。Python 3.9.6 で同じ結果を確認しました。

例 2

イテレータは1回しか読めない

c = [1, 2, 3] に it = reversed(c) を実行し、next(it) を 4 回呼びます。

  • reversed() が返すイテレータは、next() を呼ぶたびに末尾から 1 つずつ要素を返します。
  • 要素を使い切ったあとに next() を呼ぶと、StopIteration が起きます。

結論: 3 回目までは 3、2、1 が順に返り、4 回目は StopIteration です。Python 3.9.6 で同じ結果を確認しました。

問題文から答えを選ぶ手順

  1. 1

    元のリストを書き換えてよいかを決める

    書き換えてよいなら reverse() です。残したいなら reversed() か [::-1] です。

  2. 2

    逆順のリストが要るか、順に取り出すだけかを決める

    for 文で順に取り出すだけなら reversed() で足ります。リストとして使うなら list() で包むか [::-1] を使います。

  3. 3

    対象がリストかどうかを確かめる

    reverse() はリストのメソッドです。文字列やタプルには無いので、reversed() か [::-1] を使います。

試験での見分け方

  • 1a.reverse() は a をその場で逆順にし、None を返す。
  • 2reversed(a) は a を変えず、逆順のイテレータを返す。
  • 3a[::-1] は a を変えず、逆順の新しいリストを返す。
  • 4文字列には reverse() が無い。

誤答しやすい選択肢

reverse() の戻り値が逆順のリストだと思う

修正: 戻り値は None です。逆順になるのは呼び出したリスト自身です。

reversed() がリストを返すと思う

修正: 返るのはイテレータです。リストにするには list(reversed(a)) とします。

文字列に reverse() を使おうとする

修正: str に reverse() は無く、AttributeError になります。s[::-1] か、"".join(reversed(s)) を使います。

確認問題

Q1a = [1, 2, 3] のとき、r = a.reverse() のあと、r は何ですか?

答え: None

reverse() は a をその場で逆順にし、戻り値は None です。a は [3, 2, 1] になります。

Q2b = [1, 2, 3] のとき、list(reversed(b)) は何で、b は何のままですか?

答え: [3, 2, 1]、b は [1, 2, 3] のまま

reversed() は元のリストを変えません。

Q3"abc".reverse() を実行するとどうなりますか?

答え: AttributeError

str には reverse() というメソッドがありません。

到達チェック

  • reverse() が None を返し、元を書き換えると言える
  • reversed() が逆順のイテレータを返すと言える
  • 元を残して逆順のリストを得る方法を 2 つ言える
  • 文字列に reverse() が無いと言える

同じ資格で次に知りたいこと

よくある質問

Qreverse() と sort(reverse=True) は同じですか?

A

違います。reverse() は今の並びを逆にするだけで、sort(reverse=True) は大きい順に並べ替えます。

Qreversed() はどんな対象に使えますか?

A

公式ドキュメントは、__reversed__() メソッドを持つか、シーケンスの規約を満たす対象と説明しています。リスト、タプル、文字列で使えます。

Qどれが一番速いですか?

A

このページでは速度を比べていません。元を残すかどうかで選びます。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)