Python 反转字符串 – 5 种方法及最佳方法

Python字符串没有内置的reverse()函数。但是,在Python中有各种方法可以反转字符串。

1. 如何在Python中反转字符串?

一些常见的反转字符串方法包括:

  • 使用切片来创建字符串的反转副本。
  • 使用for循环并以相反的顺序添加字符
  • 使用while循环以相反的顺序迭代字符串字符并将它们附加
  • 使用字符串join()函数与reversed()迭代器
  • 从字符串创建一个列表,然后调用其reverse()函数
  • 使用递归

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) 使用 While 循环反转字符串

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() 方法反转字符串

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

1.6) 使用递归反转字符串

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

2. Python 中反转字符串的最佳方法

我们可以通过多种算法来反转字符串。我们已经看过其中的六种。但是你应该选择哪一种来反转字符串呢?我们可以使用timeit 模块来运行这些函数的多次迭代,并得到运行它们所需的平均时间。所有上述函数都存储在一个名为string_reverse.py的 Python 脚本中。我逐个执行了所有这些函数,每个函数执行了 100,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

下表呈现了结果以及从最佳算法到最慢算法的速度。

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. 参考资料

Source:
https://www.digitalocean.com/community/tutorials/python-reverse-string