Python 中反转字符串:不可变性的解释
在 Python 中, 字符串是不可变的 ,这意味着一旦创建了一个字符串,它就不能被更改 。这种不可变性使得在严格意义上无法原地反转字符串,因为您不能修改原始字符串对象。
看看下面的代码:
s = "hello"
s[0] = "H"
>>> TypeError: 'str' object does not support item assignment
这段代码会导致错误。Python 会抛出 TypeError,因为它不支持字符串的项赋值。
如果您想更改字符串,您需要创建一个新的字符串。这里有一些方法可以做到:
s = "hello"
s = "H" + s[1:] # Create a new string
print(s)
使用切片
在 Python 中,最 Pythonic 的字符串反转方法是使用切片:
s = "hello"
reversed_s = s[::-1]
print(reversed_s) # Output: "olleh"
使用 reversed()函数
您还可以使用 reversed() 函数,该函数返回一个迭代器,可以按反向顺序访问字符串:
s = "hello"
reversed_s = "".join(reversed(s))
print(reversed_s) # Output: "olleh"
使用循环
如果你想手动反转字符串,可以使用循环:
s = "hello"
reversed_s = ""
for char in s:
reversed_s = char + reversed_s
print(reversed_s) # Output: "olleh"
使用列表(类似原地操作的行为)
如果你需要与可变序列一起工作,可以将字符串转换为列表,原地反转列表,然后再将其转换回字符串:
s = "hello"
s_list = list(s)
s_list.reverse()
reversed_s = "".join(s_list)
print(reversed_s) # Output: "olleh"
双指针技术
它涉及使用双指针技术(索引或引用)遍历基于字符串创建的列表:
s = "hello"
s_list = list(s)
i, j = 0, len(s) - 1
while i < j:
s_list[i], s_list[j] = s_list[j], s_list[i]
i += 1
j -= 1
reversed_s = "".join(s_list)
print(reversed_s) # Output: "olleh"