替换Python字符串中2个数组的值

2024-09-30 22:20:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串和两个数组,如下所示:

st="a1b2c3d"
arr1 = ['1','2','3']
arr2 = ['X','Y','Z']

我要将“1”、“2”、“3”的所有值替换为“X”、“Y”、“Z”。最后一个字符串如下所示:

'aXbYcZd'

所以我写了这个循环:

for i in range(0, len(arr1)):
    st.replace(str(arr1[i]),str(arr2[i]))

结果是:

'aXb2c3d'
'a1bYc3d'
'a1b2cZd'

如何正确地做我想做的事?你知道吗

谢谢!你知道吗


Tags: 字符串inforlenrange数组replacest
3条回答

如果使用替换

>>> table = str.maketrans('123', 'XYZ')
>>> result = 'a1b2c3d'.translate(table)
>>> result
'aXbYcZd'

maketrans需要2个字符串作为参数。如果你真的有一个列表,你可以使用''.join(l)把它变成一个合适的字符串。你只需要做一次桌子。你知道吗

效率只有一点。str.translate是在映射a=>;bb=>;其他内容时正确执行此操作的方法。如果要替换字符串,则可能需要使用re.sub。你知道吗

反复调用replace意味着每次替换都必须遍历整个字符串,即O(m*n)。取而代之的是:

rep = dict(zip(arr1, arr2)) # make mapping, O(m)
result = ''.join(rep.get(ch, ch) for ch in st)

第一行是O(m),其中m是arr1和arr2的长度。你知道吗

第二行是O(n),其中n是st的长度

总的来说,这是O(m+n)而不是O(m*n),如果m或n很大,这是一个重大的胜利。你知道吗

使用^{}同时遍历两个列表以替换值:

st = "a1b2c3d"
arr1 = ['1','2','3']
arr2 = ['X','Y','Z']

for x, y in zip(arr1, arr2):
    st = st.replace(x, y)

print(st)
# aXbYcZd

^{}不会就地替换字符串。您需要将返回值赋回变量。你知道吗

相关问题 更多 >