2014-07-23 64 views
0

我一直在尝试加强列表中的技能,尤其是列表的列表。我现在有一个列表,我列出了一个列表。它的一个片段如下所示。我设置它以便列表由[姓名,父母,父母]组成。通过列表列表进行交互以创建新列表

group = [[steve,adam,avery],[avery, sarah, henry], [adam, harry, jane], [john, helene, bill], [andrew, helene, bill], [david, bill, helene]] 

我想通过列表清单,以创建显示[名称,父,父母,祖父母,外祖父母]列表的新列表进行迭代。如果没有祖父母可以显示,那么应该显示0。

示例输出:

[[steve, adam, avery, sarah, henry, harry, jane], [avery, sarah, henry, 0, 0, 0, 0], [adam, harry, jane, 0, 0, 0, 0], [john, helene bill, 0, 0, 0, 0], [andrew, helene, bill, 0,0, 0, 0], [david, bill, helene, 0, 0, 0, 0]] 

我试图与一个用于作用中在范围循环(0,LEN(组)),但保持接收到错误。任何帮助将不胜感激。

+0

为什么'harry,jane'不在第一个子列表中? –

+0

寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。 – moooeeeep

+0

“a 0应显示”...对于Python中的信息,您通常使用“无”来指示缺少的值。此外,“你有没有祖父母吗?没有”是有道理的,而“你有一个盛大父母吗?0”没有,所以它更接近于自然语言。 – Bakuriu

回答

1

你必须建立名字的父母的映射第一:

parents = {n: [p1, p2] for n, p1, p2 in group} 

现在你可以看一下父母建立一个新的列表:

[[n, p1, p2] + parents.get(p1, [0, 0]) + parents.get(p2, [0, 0]) 
for n, p1, p2 in group] 

演示:

>>> group = [['steve', 'adam', 'avery'], ['avery', 'sarah', 'henry'], ['adam', 'harry', 'jane'], ['john', 'helene', 'bill'], ['andrew', 'helene', 'bill'], ['david', 'bill', 'helene']] 
>>> parents = {n: [p1, p2] for n, p1, p2 in group} 
>>> [[n, p1, p2] + parents.get(p1, [0, 0]) + parents.get(p2, [0, 0]) 
... for n, p1, p2 in group] 
[['steve', 'adam', 'avery', 'harry', 'jane', 'sarah', 'henry'], ['avery', 'sarah', 'henry', 0, 0, 0, 0], ['adam', 'harry', 'jane', 0, 0, 0, 0], ['john', 'helene', 'bill', 0, 0, 0, 0], ['andrew', 'helene', 'bill', 0, 0, 0, 0], ['david', 'bill', 'helene', 0, 0, 0, 0]] 
+0

哇真棒 - 谢谢!它似乎可能会使我的生活更容易使用字典 - 没有意识到我自己! – WycG

+0

真棒 - 只是 - 学到了很多东西。哈哈现在我更关心如何用字典来做这个迭代。只是尝试了一个小时无济于事。 父母= {n:[p1,p2]为n,p1,p2在组中} 这就创建了dic。如果我想追加到dic的列表中,这次不包括0,只是祖父母,如果他们在那里,所以一些列表会比其他列表更短。我的概率是,如果有人没有祖父母,我会得到一个错误 - 异想天开。 – WycG

+0

@WycG:在这种情况下,有'dict.get()'返回一个空列表:'[n,p1,p2] + parents.get(p1,[])+ parents.get(p2,[])''。如果姓名不在“父母”字典中,则会连接空列表而不是“[0,0]”。 –