2011-07-26 65 views
-1

我有一個列表:的Python:使用列表合併列表

packets=[['B', 'A'], ['B', 'C'], ['A', 'D'], ['C', 'D'], ['C', 'E'], ['D', 'E'], []] 

我有兩個對同一列表類似的循環:

for a in packets[:]: 
    for b in packets[:]: 

即每次a=['B','A']b迭代從['B','A']所有通往['D','E']的路。這就是我想做的事:

如果a的最後一個元素等於b即第一要素,當a=['B','A']b=['A','D']我必須['B','A','D']['B','A','D']的最後一個元素再次等於['D','E']的第一個元素。所以,現在我必須有['B','C','D','E']

同樣,當A=['B','C']b=['C','E']我必須有['B','C','E']。當A=['B','C']b=['C','D']b=['D','E']我必須有['B','C','D','E']等等。

任何想法?

+0

什麼是在結束了'[]'元素的目的是什麼?你不需要在Python中進行迭代的定位,因爲列表知道它自己的長度。 –

+2

如果您已經編寫了任何代碼,則應該發佈它(並確保將其格式化爲代碼)。另外,你的意思是第一次['B','A','D','E']? – Jodaka

+2

如果你有[['A','B'],['B','C'],['C','D']]怎麼辦?你想在輸出中輸入['A','B','C']和['A','B','D']嗎?如果有一個循環,如[['A','B'],['B','A']]怎麼辦? –

回答

2

不知道這是否是你想要的,但

>>> packets=[['B', 'A'], ['B', 'C'], ['A', 'D'], ['C', 'D'], ['C', 'E'], ['D', 'E'], []] 
>>> 
>>> for a in packets: 
...  for b in packets: 
...   if a and b and a[-1]==b[0]: 
...    print a[:-1]+b 
...    packets.append(a[:-1]+b) 
... 
['B', 'A', 'D'] 
['B', 'C', 'D'] 
['B', 'C', 'E'] 
['A', 'D', 'E'] 
['C', 'D', 'E'] 
['B', 'A', 'D', 'E'] 
['B', 'C', 'D', 'E'] 
+0

在這個答案中我不確定的一件事是在'['B','A','D','E']中重複'['B','A','D']' '和類似的情況。從問題中的單詞選擇中,很難判斷是否需要。此外,這裏假定列表中沒有循環 - 否則你被困在一個無限循環中(嘗試'packets = [['B','A'],['A','B']]'再次,沒有辦法從問題中知道這是否是一個問題 – Jodaka

+1

@Jodaka,正如你所說,這個問題留下了很多細節,我懷疑圖/樹會更好地模擬這些數據 –