2012-09-20 161 views
-2

我有一个元组列表和列表: tup = [(1,2),(2,3),(3,4), (4,5),(5,6),(6,7)] a = [1,2,3,4,5,6,7]结合元组和列表的列表,从列表中删除元组元素

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

我有这两种结构,这样结合: 我得到一个列表:

[(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

我不知道我理解这个问题。请问元组列表中的元组是否总是出现在列表中的某个地方(如果他们这样做,他们会一直出现在一起)?他们会永远是一个二元组吗?他们会一直准备好吗? –

回答

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

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)]] 
+0

嗯,再次阅读这个问题,它看起来可能是任意的数字,你只是想将任何值“拉”到一起,就像gnibbler那样。 –