同时替换多个字符串

Joh*_*ith 5 python

可以说我有这个字符串"abcd"

现在我想用'd'替换所有'a',我想用'a'替换所有''s'.问题是string.replace在这种情况下不起作用.

"ABCD" .replace( '一个', 'd').代替( 'd', 'a')的

ABCA

预期输出为"dbca"

我怎么会这样做?

Loo*_*cid 6

你可以用.translate().

返回字符串的副本,其中每个字符已通过给定的转换表进行映射.

https://docs.python.org/3/library/stdtypes.html#str.translate

例:

>>> "abcd".translate(str.maketrans("ad","da"))
'dbca'
Run Code Online (Sandbox Code Playgroud)


Jah*_*ows 0

您可以使用列表理解来切换所需的值

\n\n
x = "abcd"\n\'\'.join([\'d\' if i == \'a\' else \'a\' if i == \'d\' else i for i in x])\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

\'dbca\'

\n
\n\n
\n\n

没有清单

\n\n
x = "abcd"\n\'\'.join(\'d\' if i == \'a\' else \'a\' if i == \'d\' else i for i in x)\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

\'dbca\'

\n
\n\n
\n\n

定时

\n\n
In [1]: x = "abcd"*10000000\n\nIn [2]: %timeit \'\'.join(\'d\' if i == \'a\' else \'a\' if i == \'d\' else i for i in x)\n5.78 s \xc2\xb1 152 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 1 loop each)\n\nIn [3]: %timeit \'\'.join([\'d\' if i == \'a\' else \'a\' if i == \'d\' else i for i in x])\n4.49 s \xc2\xb1 157 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 1 loop each)\n
Run Code Online (Sandbox Code Playgroud)\n\n

事实证明列表理解稍微快一些。

\n