使用分隔符将新列表插入现有列表?

时间:2017-06-27 17:06:03

标签: python list tuples

我有一个存储坐标元组的列表。例如:

coords = [(0,0), (1,1), (4,4), (4,6), (9,2), (34,14), (43,6)]

我有另外两个元组作为分隔符(它们总是在coords列表中),例如:

start = (1,1)
end = (9,2)

start点并不总是列在end点之前,但它们都始终在coords列表中。

最后,我有另一个单独的坐标列表,例如:

to_add = [(50,50), (71,31), (84,24)]

基本上,我想删除coords列表中的所有项目  位于startend元组之间,并在其中添加to_add项。最终的结果是这样的:

coords = [(0,0), (1,1), (50,50), (71,31), (84,24), (9,2), (34,14), (43,6)]

我该怎么做?

2 个答案:

答案 0 :(得分:2)

将列表分为三个不同的列表,即从0索引到起始坐标索引,另一个从起始坐标索引到结束坐标,最后一个列表从结束坐标索引到列表的最后一个元素。现在只添加带有to_add列表的第一个和最后一个列表。

所需输出的代码段

start = (1,1)
end = (9,2)
start, end =  sorted((end, start))
to_add = [(50,50), (71,31), (84,24)]
coords = coords[:coords.index(start)+1] + to_add + coords[coords.index(end):]

输出

[(0, 0), (1, 1), (50, 50), (71, 31), (84, 24), (9, 2), (34, 14), (43, 6)]

答案 1 :(得分:1)

使用sorted()list.index()函数的解决方案:

coords = [(0,0), (1,1), (4,4), (4,6), (9,2), (34,14), (43,6)]
end = (1,1)
start = (9,2)
to_add = [(50,50), (71,31), (84,24)]

bounds = sorted((end, start))  # getting arranged boundaries
coords[coords.index(bounds[0])+1:coords.index(bounds[1])] = to_add

print(coords)

输出:

[(0, 0), (1, 1), (50, 50), (71, 31), (84, 24), (9, 2), (34, 14), (43, 6)]