2017-10-09 52 views
0

我想要做的是根據它們的公共元素分割一些列表,使用它們來自哪個列表的標識符。因此,首先建立一個包含所有列出了所有的常用項目的列表,然後與現有列表等Python將列表重複地分割爲分區間

所以最好用一個例子來解釋它的一個子集列表:

list A : [ 2, 4, 6, 8, 10 ] 
list B : [ 2, 6, 10, 11 , 13 ] 
list C : [ 3, 6, 8, 9 , 11 ] 
===> OUTPUT : 
([ A, B, C ] : [6]) , 
([ A, B ] : [ 2, 10 ]) , 
([ A, C ] : [ 8 ]) 
([ B, C ] : [ 11 ]) , 
([ A ] : [ 4 ]) , 
([ B ] : [ 13]) , 
([ C ] : [ 3 , 9 ] 

我能找到通過在紙的一種工作方式:

  • 找到interestion一個& B,然後從A刪除這些項目和B. A&B = [2,6,10], A = [ 4,8] , B = [ 11,13 ]
  • 然後找到interection,現在A&B becomes [ 2, 10 ]
  • 繼續這樣反覆,每次更新我的名單,與他們的新內容等

但上面似乎不那麼Python的我 - 和我是一個相當新的用戶到Python。我可以使用任何圖書館來幫助我嗎?我打算使用Python 2.7,但如果要去Python 3可以幫助我,我可以這樣做。

+1

使用集這個問題。 – Igle

+0

以上是什麼?您只發布*規格*。 –

+0

這看起來像* lattice *結構。 –

回答

1

我沒有足夠的信譽發表評論,我敢肯定這是不是這樣做的最佳方式,但快速的事情,也許可以提供幫助。

如果你開始與每個列表的一封信相關聯的字典:

lists = { 
'A' : [2,4,6,8,10], 
'B' : [2,6,10,11,13], 
'C' : [3,6,8,9,11] 
} 

然後,您可以用出現類似這樣的東西映射(如果你不熟悉defaultdict或集合庫檢查它,它的真棒)

from collections import defaultdict 

occurrences = defaultdict(list) 

for letter, values in lists.items(): 
    for value in values: 
     occurrences[value].append(letter) 

然後使用另一個字典來按值字典中出現

result = defaultdict(list) 
for value, letters in occurrences.items(): 
    result[tuple(letters)].append(value) 

,你會得到

{('A',): [4], 
    ('A', 'B'): [2, 10], 
    ('A', 'B', 'C'): [6], 
    ('A', 'C'): [8], 
    ('B',): [13], 
    ('B', 'C'): [11], 
    ('C',): [3, 9]} 
1

是你在編程競賽還是什麼?

>>> A=[ 2, 4, 6, 8, 10 ] 
>>> B =[ 2, 6, 10, 11 , 13 ] 
>>> C =[ 3, 6, 8, 9 , 11 ] 
>>> r=set(A+B+C) 
>>> l=[[] for i in r] 
>>> for index,i in enumerate(r): 
    add=[] 
    if i in A: 
     add.append("a") 
    if i in B: 
     add.append("b") 
    if i in C: 
     add.append("c") 
    l[index].extend(add) 


>>> d={} 
>>> for i in r: 
    d[i]=0 


>>> for index,i in enumerate(d): 
    d[i]=l[index] 


>>> final={} 
>>> for i in d.values(): 
    final[tuple(i)]=[] 


>>> for k,v in d.items(): 
    final[tuple(v)].append(k) 


>>> final 
{('c',): [3, 9], ('a',): [4], ('a', 'c'): [8], ('a', 'b'): [2, 10], ('a', 'b', 'c'): [6], ('b', 'c'): [11], ('b',): [13]} 
>>> 
+0

不需要spped - 只是想編寫一個腳本,它將對我從api獲得的數據進行一些過濾。將檢查以上的感謝! – ghostrider