假设我有这个字符串“abcd”
现在我想用'd'替换所有'a',我想用'a'替换所有''s'。问题是string.replace在这种情况下不起作用。
“abcd”.replace('a','d')。replace('d','a')
ABCA
预期输出为“dbca”
我将如何实现这一目标?
答案 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