Python字符串倒转全攻略:五种高效方法与最佳实践详解
Python字符串没有内置的reverse()函数。但是,在Python中有多种方法可以反转字符串。
如何在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_slicing(input_str))
如果你运行上述Python脚本,输出结果将会是:
使用切片反转字符串 = FE∂çBA
1.2)使用for循环逆转字符串
def reverse_for_loop(s):
s1 = ''
for c in s:
s1 = c + s1 # 以相反顺序追加字符
return s1
input_str = 'ABç∂EF'
if __name__ == "__main__":
print('使用for循环反转字符串 =', 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('使用while循环反转字符串 =', reverse_while_loop(input_str))
输出:使用while循环将字符串反转 = FE∂çBA
1.4) 使用join()和reversed()方法来反转一个字符串。
def reverse_join_reversed_iter(s):
s1 = ''.join(reversed(s))
return s1
input_str = 'ABç∂EF'
if __name__ == "__main__":
print('使用join()和reversed()反转字符串 =', reverse_join_reversed_iter(input_str))
输出:使用join()和reversed()将字符串反转 = FE∂çBA
1.5) 使用列表的reverse()功能逆转Python字符串
def reverse_list(s):
temp_list = list(s)
temp_list.reverse()
return ''.join(temp_list)
input_str = 'ABç∂EF'
if __name__ == "__main__":
print('使用列表reverse()反转字符串 =', reverse_list(input_str))
输出:使用列表reverse()将字符串反转 = FE∂çBA
1.6) 通过递归使用Python反转字符串。
def reverse_recursion(s):
if len(s) == 0:
return s
else:
return reverse_recursion(s[1:]) + s[0]
input_str = 'ABç∂EF'
if __name__ == "__main__":
print('使用递归反转字符串 =', reverse_recursion(input_str))
输出:使用递归将字符串反转 = FE∂çBA
2. Python中逆转字符串的最佳方法
我们可以通过多个算法来反转一个字符串。我们已经见过其中的六种。但是在这些算法中,你应该选择哪一种来反转一个字符串呢。我们可以使用timeit模块运行这些函数的多个迭代,并得到运行它们所需时间的平均值。所有上述的函数都存储在一个名为string_reverse.py的Python脚本中。我使用timeit模块逐个执行了这些函数1,00,000次,并得到了最好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

算法 | TimeIt执行时间(5次最佳) | 慢度 |
---|---|---|
切片 | 0.449 微秒 | 1x |
列表reverse() | 2.46 微秒 | 5.48x |
reversed() + join() | 2.49 微秒 | 5.55x |
for循环 | 5.5 微秒 | 12.25x |
while循环 | 9.4 微秒 | 20.94x |
递归 | 24.3 微秒 | 54.12x |
3. 概述
我们应该使用Python中的切片来反转字符串。它的代码非常简单而且小,我们不需要编写自己的逻辑来反转字符串。而且,根据上述测试执行结果,这也是最快的反转字符串的方法。
你可以从我们的GitHub仓库中查看完整的Python脚本和更多的Python示例。
4. 参考文献
- reversed() API文档
- str.join() API文档