2017-07-07 55 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 
相關問題