Skip to content

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))语义清晰,同样常用
循环 / 递归 / 栈便于理解算法,长串慎用递归

参考