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

替换Python字符串中2个数组的值,python,arrays,string,for-loop,Python,Arrays,String,For Loop,我有一个字符串和两个数组,如下所示: 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

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

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'
如何正确地做上面我想要的事情

谢谢

用于同时迭代两个列表以替换值:

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
不在适当位置替换字符串。您需要将返回值赋回变量。

用于同时迭代两个列表以替换值:

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

不在适当位置替换字符串。您需要将返回值赋回变量。

反复调用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较大,这将是一个重大的胜利。

反复调用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较大,这将是一个重大的胜利。

如果您要替换字符,而不是低效的替换循环使用
str.translate

>>> table = str.maketrans('123', 'XYZ')
>>> result = 'a1b2c3d'.translate(table)
>>> result
'aXbYcZd'
maketrans
需要两个字符串作为参数。如果你真的有一个列表,你可以使用
'.join(l)
把它变成一个合适的字符串。你只需要做一次桌子


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

如果要替换字符,则使用
str.translate
,而不是低效的替换循环使用
str.maketrans

>>> table = str.maketrans('123', 'XYZ')
>>> result = 'a1b2c3d'.translate(table)
>>> result
'aXbYcZd'
maketrans
需要两个字符串作为参数。如果你真的有一个列表,你可以使用
'.join(l)
把它变成一个合适的字符串。你只需要做一次桌子


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

效率高,使用了不太知名的内置代码。效率高,使用了不太知名的内置代码。谢谢。我选择你的解决方案,因为它适合我的情况。我有超过100个字符串元素作为html img标记的数组,我想将其替换为图像本身的名称。谢谢。我选择你的解决方案,因为它适合我的情况。我有一个包含100多个字符串元素的数组,作为html img标记,我想将其替换为图像本身的名称。这个解决方案很漂亮,效率很高,但是它只适用于字符,对吗?我的数组有100多个元素作为html字符串,所以它不起作用。谢谢大家!@哈菲德尔:没错。下一次请提供一组更真实的示例输入。你问题中的所有示例都使用单个字符,所以这就是我编写代码要处理的。这个解决方案很漂亮,效率很高,但是它只对字符有效,对吗?我的数组有100多个元素作为html字符串,所以它不起作用。谢谢大家!@哈菲德尔:没错。下一次请提供一组更真实的示例输入。您问题中的所有示例都使用单个字符,因此这就是我编写代码要处理的内容。