Pythonでリストや文字列を逆順に並べ替え(reverse, reversed)

Pythonでリストの要素を逆順に並べ替えるにはreverse(), reversed()およびスライスを使った方法があります。文字列やタプルを逆順に並べ替えたい場合はreversed()かスライスを使います。 ここでは以下の内容について説明します。

リスト型のメソッド reverse(): 元のリストを逆順に並べ替え 組み込み関数 reversed(): 要素を逆順に取り出すイテレータを生成 スライスによって逆順に並べ替え 文字列やタプルを逆順に並べ替える方法

逆順に並べ替えるのではなく昇順・降順にソートしたい場合は

リスト型のメソッド reverse(): 元のリストを逆順に並べ替え

reverse()はリスト型のメソッド。

  1. 組み込み型 — Python 3.6.6 ドキュメント

元のリスト自体が書き換えられる破壊的処理。

org_list = [1, 2, 3, 4, 5]

org_list.reverse()
print(org_list)
# [5, 4, 3, 2, 1]

reverse()が返すのはNoneなので気をつけてください。

print(org_list.reverse())
# None

組み込み関数 reversed(): 逆順に取り出すイテレータを生成

reversed()は組み込み関数。

  1. 組み込み関数 reversed() — Python 3.6.6 ドキュメント

reversed()は要素を逆順に取り出すイテレータを返します。元のリストは変更されない非破壊的処理。

org_list = [1, 2, 3, 4, 5]

reverse_iterator = reversed(org_list)
print(org_list)
# [1, 2, 3, 4, 5]

print(type(reverse_iterator))
# <class 'list_reverseiterator'>

reversed()はリストではなくイテレータを返すので気をつけてください。 forループで回す場合はそのまま使えば問題ありません。

for i in reversed(org_list):
    print(i)
# 5
# 4
# 3
# 2
# 1

逆順のリストを取得したい場合はlist()でイテレータをリストに変換します。

new_list = list(reversed(org_list))
print(org_list)
print(new_list)
# [1, 2, 3, 4, 5]
# [5, 4, 3, 2, 1]

スライスによって逆順に並べ替え

元のオブジェクトはそのままで逆順に並べ替えたい場合はスライスを使うこともできます。 スライスは[start:stop:end]の形で範囲や増分を指定します。start, stopを省略すると全体を選択し、stepを-1とすると後ろから一つずつ要素を取得することになるので[::-1]とすると逆順に並べ替えられたオブジェクトが取得できます。

org_list = [1, 2, 3, 4, 5]

new_list = org_list[::-1]
print(org_list)
print(new_list)
# [1, 2, 3, 4, 5]
# [5, 4, 3, 2, 1]

スライスについての詳細は

文字列やタプルを逆順に並べ替える方法

文字列、タプルはイミュータブル(更新不可)なので、元のオブジェクトを書き換えるreverse()メソッドは用意されていません。 文字列やタプルを並べ替えたい場合はreversed()かスライスを使います。 文字列を逆順に並べ替え イテレータを文字列に直接変換することはできないので、reversed()を使う場合はイテレータをリスト(一文字ずつが要素として格納されたリスト)に変換してからjoin()で一つの文字列に連結します。

org_str = 'abcde'

new_str_list = list(reversed(org_str))
print(new_str_list)
# ['e', 'd', 'c', 'b', 'a']

new_str = ''.join(list(reversed(org_str)))
print(new_str)
# edcba

スライスを使った方法はリストと同じ。こちらのほうが簡単。

new_str = org_str[::-1]
print(new_str)
# edcba

タプルを逆順に並べ替え イテレータをタプルに変換するにはtuple()を使います。

org_tuple = (1, 2, 3, 4, 5)

new_tuple = tuple(reversed(org_tuple))
print(new_tuple)
# (5, 4, 3, 2, 1)

スライスを使った方法はリストと同じ。

new_tuple = org_tuple[::-1]
print(new_tuple)
# (5, 4, 3, 2, 1)
Last Updated: 6/26/2019, 10:34:03 PM