2017-07-07 73 views
0

想像这样一个列表:如何在Python3.0中找到子列表的子列表?

SuperList = [[[1,2,3],[1,2,4]],[[6,3,1],[9,0,4]]] 

正如你可以看到我有一个子表内的子列表。 我怎样才能找到这些子列表的交集? 在这种情况下,答案是1,3和4. 我的目标是追加在新列表中每个子列表中至少出现一次的所有元素(无论它是否出现在一个子列表的所有子列表中)

我试图与set.intersection,而是不断我得到

'unhashable type: 'list'' 

或试图放松身心的名单,我得到

'can't use the starred expression here'! 
+0

是你试图找出'1'是否发生在任何地方,或试图找到确切的子列表发生? – randomir

回答

0

您可以展平子列表,并使用set.intersection采取它们的交集:

>>> set.intersection(*[{x for lst in sub for x in lst} for sub in SuperList]) 
set([1, 3, 4]) 
+0

摩西是你摩西吗?谢啦!我真的很感激!我一直在工作10 15个小时,最后它非常简单!新手程序员挣扎我猜!再次感谢! –

0

这不是从你的问题正是你正在尝试做明确,但是如果你正在尝试测试是否存在的一个元素(例如1任何子列表,您可以首先弄平“超级列表”,并从该列表中制作一个集合。

我们可以flatset()做到一气呵成:

def flatset(lst): 
    try: 
     return set(lst) 
    except TypeError: 
     s = set() 
     for item in lst: 
      s.update(flatset(item)) 
     return s 

例如:

>>> superlist = [[[1,2,3],[1,2,4]],[[6,3,1],[9,0,4]]] 
>>> flatset(superlist) 
set([0, 1, 2, 3, 4, 6, 9]) 
>>> 1 in flatset(superlist) 
True 
相关问题