很抱歉,没有内置函数可以做到这一点,但是您可以自己创建一个!这些步骤非常简单,我们只需要在列表上滑动一个窗口,其中窗口的宽度为
len(old)
。在每个位置,我们检查窗口是否等于
old
,如果是,我们就在窗口前面切片,插入
new
,并将剩余的
list
连接到后面 - 这可以通过直接分配给
old
切片来完成,正如
@OmarEinea
所指出的那样。
def replace(seq, old, new):
seq = seq[:]
w = len(old)
i = 0
while i < len(seq) - w + 1:
if seq[i:i+w] == old:
seq[i:i+w] = new
i += len(new)
else:
i += 1
return seq
有一些测试表明它可以正常工作:
>>> replace([0, 1, 3], [0, 1], [1, 2])
[1, 2, 3]
>>> replace([0, 1, 3, 0], [0, 1], [1, 2])
[1, 2, 3, 0]
>>> replace([0, 1, 3, 0, 1], [0, 1], [7, 8])
[7, 8, 3, 7, 8]
>>> replace([1, 2, 3, 4, 5], [1, 2, 3], [1, 1, 2, 3])
[1, 1, 2, 3, 4, 5]
>>> replace([1, 2, 1, 2], [1, 2], [3])
[3, 3]
正如@user2357112
所指出的,使用for循环
会导致重新评估list
中被替换的部分,因此我更新了答案,改用while循环
。
itertools
模块中。 - Barmar