2012-09-20 201 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那樣。 –