2011-07-26 68 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,正如你所说,这个问题留下了很多细节,我怀疑图/树会更好地模拟这些数据 –