Pythonで文字列を逆にする方法 – 5つの方法と最適な方法

Pythonの文字列には組み込みのreverse()関数がありませんが、Pythonで文字列を反転させるためにはさまざまな方法があります。

Pythonで文字列を逆にする方法は?

文字列を逆にする一般的な方法には、以下のようなものがあります。

  • Using Slicing to create a reverse copy of the string.
  • Using for loop and appending characters in reverse order
  • Using while loop to iterate string characters in reverse order and append them
  • Using string join() function with reversed() iterator
  • Creating a list from the string and then calling its reverse() function
  • Using Recursion

1.1) スライスを使用してPythonで文字列を逆にする

def reverse_slicing(s):
    return s[::-1]

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using slicing =', reverse_slicing(input_str))

もし上記のPythonスクリプトを実行すれば、出力は次のようになります。

Reverse String using slicing = FE∂çBA

1.2) Forループを使用して文字列を反転する。

def reverse_for_loop(s):
    s1 = ''
    for c in s:
        s1 = c + s1  # appending chars in reverse order
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using for loop =', reverse_for_loop(input_str))

出力: forループを使用して文字列を反転 = FE∂çBA

1.3) ループを使用して文字列を逆さまにする

def reverse_while_loop(s):
    s1 = ''
    length = len(s) - 1
    while length >= 0:
        s1 = s1 + s[length]
        length = length - 1
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using while loop =', reverse_while_loop(input_str))

1.4) `join()`と`reversed()`を使って文字列を逆さにする。

def reverse_join_reversed_iter(s):
    s1 = ''.join(reversed(s))
    return s1

1.5) リストのreverse()を使用したPythonの文字列の逆転

def reverse_list(s):
    temp_list = list(s)
    temp_list.reverse()
    return ''.join(temp_list)

1.6) 再帰を使用してPythonで文字列を逆にします。

def reverse_recursion(s):
    if len(s) == 0:
        return s
    else:
        return reverse_recursion(s[1:]) + s[0]

2. Pythonで文字列を逆さまにする最善の方法

私たちは複数のアルゴリズムを使って文字列を反転させることができます。これまでに6つのアルゴリズムを見てきました。しかし、どれを使って文字列を反転させるべきかはどれか。これらの関数を実行して、それらを実行するために必要な平均時間を得るためにtimeitモジュールを使用することができます。上記のすべての関数は、string_reverse.pyという名前のPythonスクリプトに保存されています。私はこれらの関数を一つずつ1,00,000回実行し、timeitモジュールを使用して最良の5回の平均値を得ました。

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_slicing("ABç∂EF"*10)'
100000 loops, best of 5: 0.449 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_list("ABç∂EF"*10)'
100000 loops, best of 5: 2.46 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_join_reversed_iter("ABç∂EF"*10)'
100000 loops, best of 5: 2.49 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_for_loop("ABç∂EF"*10)'
100000 loops, best of 5: 5.5 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_while_loop("ABç∂EF"*10)'
100000 loops, best of 5: 9.4 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_recursion("ABç∂EF"*10)'
100000 loops, best of 5: 24.3 usec per loop
Python Reverse String
Algorithm TimeIt Execution Time (Best of 5) Slowness
Slicing 0.449 usec 1x
List reverse() 2.46 usec 5.48x
reversed() + join() 2.49 usec 5.55x
for loop 5.5 usec 12.25x
while loop 9.4 usec 20.94x
Recursion 24.3 usec 54.12x

3. 要約

Pythonで文字列を逆にするためには、スライシングを使用するべきです。そのコードは非常にシンプルでコンパクトであり、文字列を反転させるために独自のロジックを書く必要がありません。また、上記のテストの実行結果によれば、文字列を反転させる最も速い方法でもあります。

弊社のGitHubリポジトリから、完全なPythonスクリプトとさらなるPythonの例をチェックアウトできます。

4. 引用文献

  • reversed() API Doc
  • str.join() API Doc
コメントを残す 0

Your email address will not be published. Required fields are marked *


广告
広告は10秒後に閉じます。
bannerAds