我想用列表中的子列表替换a另一个子列表.像这样的东西:
a=[1,3,5,10,13]
Run Code Online (Sandbox Code Playgroud)
让我们说我想要一个子列表,如:
a_sub=[3,5,10]
Run Code Online (Sandbox Code Playgroud)
并替换它
b_sub=[9,7]
Run Code Online (Sandbox Code Playgroud)
所以最终的结果将是
print(a)
>>> [1,9,7,13]
Run Code Online (Sandbox Code Playgroud)
有什么建议?
ins*_*get 13
In [39]: a=[1,3,5,10,13]
In [40]: sub_list_start = 1
In [41]: sub_list_end = 3
In [42]: a[sub_list_start : sub_list_end+1] = [9,7]
In [43]: a
Out[43]: [1, 9, 7, 13]
Run Code Online (Sandbox Code Playgroud)
希望有所帮助
Gar*_*tty 13
您可以使用列表切片很好地完成此操作:
>>> a=[1, 3, 5, 10, 13]
>>> a[1:4] = [9, 7]
>>> a
[1, 9, 7, 13]
Run Code Online (Sandbox Code Playgroud)
那么我们如何在这里得到指数呢?好吧,让我们从找到第一个开始吧.我们逐项扫描,直到找到匹配的子列表,并返回该子列表的开始和结束.
def find_first_sublist(seq, sublist, start=0):
length = len(sublist)
for index in range(start, len(seq)):
if seq[index:index+length] == sublist:
return index, index+length
Run Code Online (Sandbox Code Playgroud)
我们现在可以进行更换 - 我们从一开始就更换我们找到的第一个,然后在我们新完成更换之后尝试找到另一个.我们重复这个,直到我们再也找不到要替换的子列表.
def replace_sublist(seq, sublist, replacement):
length = len(replacement)
index = 0
for start, end in iter(lambda: find_first_sublist(seq, sublist, index), None):
seq[start:end] = replacement
index = start + length
Run Code Online (Sandbox Code Playgroud)
我们可以很好地使用它:
>>> a=[1, 3, 5, 10, 13]
>>> replace_sublist(a, [3, 5, 10], [9, 7])
>>> a
[1, 9, 7, 13]
Run Code Online (Sandbox Code Playgroud)