Python能否用replace互换Hello World的e和o得到Holle Werld
Python字符串'e'与'o'互换实现方案
链式调用replace()失效的原因
链式replace()按顺序执行替换,无法直接实现字符互换:
- 第一步执行
s.replace("e","o")时,原字符串所有'e'会被替换为'o',此时"Hello World"变为"Hollo World",原有的'e'和本来的'o'都以'o'形式存在 - 第二步执行
.replace("o","e")时,会把当前所有'o'(包括第一步刚替换出来的'o'、字符串原生的'o')全部换成'e',最终输出错误结果Helle Werld
如果硬要用replace()实现,必须引入原字符串不存在的临时字符做中转,例:
s = "Hello World" s = s.replace("e", "\x00").replace("o", "e").replace("\x00", "o") print(s) # 输出:Holle Werld
这种方案需要提前确认临时字符不会出现在原字符串中,通用性差,不推荐使用。
最简实现方案
你使用的translate()配合maketrans()的思路本身就是Python实现字符互换的最优原生方案,可以进一步简化写法:
- 省去中间变量定义,直接单行完成:
s = "Hello World" print(s.translate(str.maketrans({'e':'o', 'o':'e'})))
- 还可以使用
maketrans的双参数简化语法,直接传入等长的待替换字符组和目标字符组,不需要构造字典:
s = "Hello World" print(s.translate(str.maketrans('eo', 'oe'))) # 输出:Holle Werld
这种实现方式执行效率高、语法简洁,不需要额外依赖,是该需求的标准写法。
内容的提问来源于stack exchange,提问作者Pankaj Thorat
相关产品推荐
相关产品推荐

