Python 中如何反转一个字符串?
Python 反转字符串最简洁的方法是切片 s[::-1]。也可用 reversed() 配合 join。本文介绍两种方法及 Unicode 注意事项。
最简洁的写法:切片 s[::-1]——步长为 -1 表示从后往前取。"hello"[::-1] 得到 "olleh"。
方法一:切片(推荐)
original = "hello"
reversed_str = original[::-1]
print(reversed_str) # "olleh"
切片 [start:stop:step] 中 step 为 -1 即倒序遍历。列表、元组等序列类型同样适用。
方法二:reversed() + join()
reversed_str = "".join(reversed("hello"))
print(reversed_str) # "olleh"
reversed() 返回反向迭代器,join 把字符拼回字符串。代码更"显式",但不如切片简洁。
性能对比
性能取决于实现和输入,需实测;不能把负步长切片理解成普通的一次连续内存拷贝。不推荐用 for 循环逐个字符拼接——Python 字符串不可变,反复拼接可能产生二次复制成本,不应依赖特定实现优化。
Unicode 注意事项
对包含组合字符(如带声调符号的字母、某些 emoji)的文本,简单反转可能把组合字符拆开。字符串切片按 Unicode 码点反转,而非可见字素;中英文也可能包含组合符号。可用支持字素簇的库,但需核对其 Unicode 版本与目标文本。
常见问题(FAQ)
Q:反转列表用什么?
A:同样可以用 lst[::-1](返回新列表);想原地反转用 lst.reverse();reversed(lst) 返回迭代器。
Q:反转后还能反转回来吗?
A:可以,s[::-1][::-1] == s 恒成立。
Q:如何只反转单词顺序而不是字符?
A:' '.join(s.split()[::-1]),split() 按空白分隔并合并连续空白,join 后不会保留原空格、换行或缩进。