note.nkmk.me

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

Date: 2018-09-07 / tags: Python, リスト, 文字列操作

Pythonでリストの要素を逆順に並べ替えるにはreverse(), reversed()およびスライスを使った方法がある。文字列やタプルを逆順に並べ替えたい場合はreversed()かスライスを使う。

ここでは以下の内容について説明する。

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

逆順に並べ替えるのではなく昇順・降順にソートしたい場合は以下の記事を参照。

スポンサーリンク

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

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

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

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

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

reverse()が返すのはNoneなので注意。

print(org_list.reverse())
# None

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

reversed()は組み込み関数。

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

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

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

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

reversed()はリストではなくイテレータを返すので注意。

forループで回す場合はそのまま使えばOK。

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

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

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

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

元のオブジェクトはそのままで逆順に並べ替えたい場合はスライスを使うことも可能。

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

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

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

スライスについての詳細は以下の記事を参照。

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

文字列、タプルはイミュータブル(更新不可)なので、元のオブジェクトを書き換えるreverse()メソッドは用意されていない。

文字列やタプルを並べ替えたい場合はreversed()かスライスを使う。

文字列を逆順に並べ替え

イテレータを文字列に直接変換することはできないので、reversed()を使う場合はイテレータをリスト(一文字ずつが要素として格納されたリスト)に変換してからjoin()で一つの文字列に連結する。

org_str = 'cebad'

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

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

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

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

タプルを逆順に並べ替え

イテレータをタプルに変換するにはtuple()を使う。

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

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

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

new_tuple = org_tuple[::-1]
print(new_tuple)
# (2, 5, 4, 1, 3)
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事