Python 字符串反转
字符串是字符序列(严格说是 Unicode 码位序列)。Python 的 str 没有类似列表的 reverse() 方法,但可以用切片、reversed()、循环等方式得到反转后的新字符串(str 不可变)。
方法一:切片(推荐)
[::-1] 表示步长为 −1的切片,即从末尾走到开头:
python
s = "STRING"
print(s[::-1])输出:
text
GNIRTS也可写 s[len(s)::-1],但 [::-1] 最简、最常用。
方法二:reversed + join
reversed(s) 返回迭代器,再用空串 ''.join(...) 拼回字符串:
python
s = "STRING"
print("".join(reversed(s)))输出:
text
GNIRTS方法三:for 循环
逐个字符前置拼接(大字符串上效率较差,仅作理解用):
python
def rev_for(s):
res = ""
for ch in s:
res = ch + res
return res
text = "STRING"
print("反转结果 =", rev_for(text))输出:
text
反转结果 = GNIRTS方法四:while 循环按下标从后往前取
python
def rev_while(s):
res = ""
i = len(s) - 1
while i >= 0:
res += s[i]
i -= 1
return res
text = "STRING"
print("反转结果 =", rev_while(text))输出:
text
反转结果 = GNIRTS方法五:转成列表再 reverse
list.reverse() 是原地反转列表,再 join 成字符串:
python
chars = list("STRING")
chars.reverse()
print("".join(chars))输出:
text
GNIRTS注意:原稿用 [1,2,3,4,5] 演示的是数字列表,与字符串反转题意不符,已改为字符列表写法。
方法六:递归
思路:最后一个字符 + 中间子串的反转;空串为基准情形。
python
def rev_rec(s):
if len(s) <= 1:
return s
return rev_rec(s[1:]) + s[0]
print(rev_rec("STRING"))输出:
text
GNIRTS长字符串会加深递归深度,一般不如切片或 reversed。
方法七:用栈(列表模拟)
后进先出,依次 pop 即可得到反转顺序。注意布尔值在 Python 中必须写 True / False,不能写 true。
python
def rev_stack(s):
stack = list(s)
out = []
while stack:
out.append(stack.pop())
return "".join(out)
n = "STRING"
print("反转结果 =", rev_stack(n))输出:
text
反转结果 = GNIRTS小结
| 方式 | 特点 |
|---|---|
s[::-1] | 简洁、高效,首选 |
''.join(reversed(s)) | 语义清晰,同样常用 |
| 循环 / 递归 / 栈 | 便于理解算法,长串慎用递归 |