同时替换多个字符串

时间:2018-04-06 04:01:21

标签: python

假设我有这个字符串“abcd”

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

“abcd”.replace('a','d')。replace('d','a')

  

ABCA

预期输出为“dbca”

我将如何实现这一目标?

3 个答案:

答案 0 :(得分:6)

您可以使用.translate()

  

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

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

示例:

>>> "abcd".translate(str.maketrans("ad","da"))
'dbca'

答案 1 :(得分:1)

您可以使用列表推导来切换所需的值

x = "abcd"
''.join(['d' if i == 'a' else 'a' if i == 'd' else i for i in x])
  

' DBCA'

没有列表

x = "abcd"
''.join('d' if i == 'a' else 'a' if i == 'd' else i for i in x)
  

' DBCA'

时序

In [1]: x = "abcd"*10000000

In [2]: %timeit ''.join('d' if i == 'a' else 'a' if i == 'd' else i for i in x)
5.78 s ± 152 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [3]: %timeit ''.join(['d' if i == 'a' else 'a' if i == 'd' else i for i in x])
4.49 s ± 157 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

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

答案 2 :(得分:0)

你可以试试python替换食谱:

string_word="abcd"

data=list(string_word)
replace_index=list({j:i for j,i in enumerate(data) if i=='a' or i=='d'}.keys())

data[replace_index[0]],data[replace_index[1]]=data[replace_index[1]],data[replace_index[0]]

print("".join(data))

输出:

dbca