【Python】文字列を反転する4つの方法

この記事では文字列を反転する方法を4つご紹介します。

入力された文字列に対して反転する方法はリストのスライスを使うのがシンプルで高速ですが、他の方法もあります。

以下の4つの方法についてそれぞれコードと共に説明していきます。

  • リストのスライスを使う
  • ループを使う
  • Listのreverse()を使う
  • 再帰関数を使う
[toc]

リストのスライス

この方法が最も簡単で高速です。

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だったら、文字を返却
  2. それ以外は、文字列の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))

 

2 件のコメント

  • 文字列のスライスを使う方法もありますね。これが最も簡単で高速なのではないでしょうか?

    string = “abcde”
    rev_string = string[::-1]
    rev_string == “edcba”

    • コメントありがとうございます。
      1番目の文字列リストのスライスと同様ですね!
      1番シンプルで良い方法だと思います!

  • 今井 正治 へ返信する コメントをキャンセル

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    ABOUTこの記事をかいた人

    個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog