组合元组列表和列表,从列表中删除元组元素

时间:2012-09-20 05:00:47

标签: python algorithm list tuples

我有一个元组列表和一个列表:     tup = [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7)]     a = [1,2,3,4,5,6,7]

元组实际上是列表a的双字母并且具有相同的顺序。

我必须将这两种结构结合起来,这样: 我获得了一份清单:

[(1,2),3,4,5,6,7]
[1,(2,3),4,5,6,7]
[1,2,(3,4),5,6,7]
[1,2,3,(4,5),6,7]

这些数字没有约束力,因此列表可能有重复或不同。 这不是一个家庭作业问题,我正在尝试实现一个需要这个的算法,出于某种原因,我无法想出一个好的方法来做到这一点。

抱歉我的问题不清楚。

2 个答案:

答案 0 :(得分:3)

你的问题不是很清楚。 起初我以为你的意思是

>>> tup = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]
>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> for i,j in enumerate(tup):
...  print a[:i]+[j]+a[i+2:]
... 
[(1, 2), 3, 4, 5, 6, 7]
[1, (2, 3), 4, 5, 6, 7]
[1, 2, (3, 4), 5, 6, 7]
[1, 2, 3, (4, 5), 6, 7]
[1, 2, 3, 4, (5, 6), 7]
[1, 2, 3, 4, 5, (6, 7)]

但我想到了另一种解释

>>> for i,j in enumerate(tup):
...  print a[:i]+[tuple(a[j[0]-1:j[1]])]+a[i+2:]
... 
[(1, 2), 3, 4, 5, 6, 7]
[1, (2, 3), 4, 5, 6, 7]
[1, 2, (3, 4), 5, 6, 7]
[1, 2, 3, (4, 5), 6, 7]
[1, 2, 3, 4, (5, 6), 7]
[1, 2, 3, 4, 5, (6, 7)]

如果tupa选择相同的数字(如果它们在一般情况下不同),那真的很不幸

答案 1 :(得分:0)

如果我理解你的要求,这应该比大多数其他选项更通用和宽容:

import bisect
[a[:bisect.bisect_left(a, lo)] + \
        [(lo, hi)] + \
        a[bisect.bisect_right(a, hi):] for (lo, hi) in tup]

输出

[[(1, 2), 3, 4, 5, 6, 7],
 [1, (2, 3), 4, 5, 6, 7],
 [1, 2, (3, 4), 5, 6, 7],
 [1, 2, 3, (4, 5), 6, 7],
 [1, 2, 3, 4, (5, 6), 7],
 [1, 2, 3, 4, 5, (6, 7)]]