-2

我有一个元组列表和一个列表: 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]

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

抱歉,我的问题不清楚。

4

2 回答 2

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如果它们在一般情况下不同

于 2012-09-20T05:06:58.163 回答
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)]]
于 2012-09-20T05:19:15.740 回答