この記事では文字列を反転する方法を4つご紹介します。
入力された文字列に対して反転する方法はリストのスライスを使うのがシンプルで高速ですが、他の方法もあります。
以下の4つの方法についてそれぞれコードと共に説明していきます。
- リストのスライスを使う
- ループを使う
- Listのreverse()を使う
- 再帰関数を使う
目次
リストのスライス
この方法が最も簡単で高速です。
Pythonで文字列を扱う場合には、スライスが使えます。
[start,stop,step]でスライスを指定します。 [::-1]にすると、start,stopは デフォルトの値となり、0から文字列の長さまでとなり、stepが-1なので文字列の最後から最初まで進みます。以下のコードの出力は、”EDCBA”になります。
original_string = "ABCDE" # [start,stop,step]でスライスする。[::-1]にすると、start,stopは # デフォルト(0から文字列の長さまで)となり、stepが-1なので文字列の最後から最初まで進む reverse_string = original_string[::-1] print(original_string) print(reverse_string)
ループを使う
ループを使った実装では、それぞれの文字を1つずつ取り出し、逆順に連結します。
for文を使って文字を取り出し、左側に足していきます。
# ループを使って文字列を逆順に反転させる方法 def rev_string(original_string): reverse_string = "" for a in original_string: reverse_string = a + reverse_string return reverse_string print(original_string) print(rev_string(original_string))
Listのreverse()を使う
Pythonで用意されているList型には、要素を反転させるreverse関数が用意されています。
与えられた文字列をリスト型に変換し、reverse関数を適用する方法です。
# listのreverse()を使う方法 # 文字列を1文字のリストに変換してからreverse()を使う。 # 1文字のリストはjoinを使って文字列に戻す def rev_string_list(original_string): original_string_list = list(original_string) original_string_list.reverse() reverse_string = "".join(original_string_list) return reverse_string print(original_string) print(rev_string_list(original_string))
再帰関数を使う
再帰関数を使うのが最も難しい方法です。
再帰関数をイメージするには実際の処理を書き出してみます。
():再帰関数に渡すことを意味する
(ABCDE)
(BCDE)+A
(CDE)+B
(DE)+C
(E)+D
長さが1なのでEを返却
ED
EDC
EDCB
EDCBA
つまり、以上の処理をまとめると、
- 文字列の長さが1だったら、文字を返却
- それ以外は、文字列の1番目以降の値を再帰関数に渡し、1番目の文字を右から足す
という処理になります。
# 再帰関数を使って文字列を反転させる def rev_recursion(original_string): if len(original_string) == 1: return original_string else: return rev_recursion(original_string[1:]) + original_string[0] print(original_string) print(rev_recursion(original_string))