2017-06-12 28 views
-1

請幫助我獲得了從集合使用列表SS1列表SS2在Python櫃檯導入櫃檯或任何其他最快的方式如何獲得自定義的元組的計數對兩個列表

SS1 = [(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 5, 6), (1, 2, 4, 5, 6), (1, 3, 4, 5, 6), (2, 3, 4, 5, 6)] 

SS2=[(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 2, 6), (1, 3, 4), (1, 3, 5), (1, 3, 6), (1, 4, 5), 
(1, 4, 6), (1, 5, 6), (2, 3, 4), (2, 3, 5), (2, 3, 6), (2, 4, 5), (2, 4, 6), (2, 5, 6), 
(3, 4, 5), (3, 4, 6), (3, 5, 6), (4, 5, 6)] 

這裏是什麼我已經試過,我不知道如何爲(1,2,4)的數個的每個元組的元素

SS1=[(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 5, 6), (1, 2, 4, 5, 6), (1, 3, 4, 5, 6), (2, 3, 4, 5, 6)] 

from collections import Counter 
c = Counter(elem[0:3] for elem in SS1[0:6]) 

for k, v in c.items(): 
    if (v > 0): 
     print(k,v) 

現在,這是運行完美的0:3,但我想要的是得到不是1,2,3的計數,但我想1,2,4個元素爲每個元組計數。

對不起球員希望你明白我的問題...對不起,我再次是新的這條巨蟒。

+1

你能澄清你的問題有點通過爲這個輸入添加期望的輸出? –

+0

你想完成什麼? –

+0

從集合導入計數器 C =計數器(ELEM [0:3]在SS1 ELEM [0:6]) 爲K,V在c.items(): 如果(V> 0): 打印( K,v) 此僅給出了下面的值 (1,2,3)3 (1,2,4)1 (1,3,4)1 (2,3,4) 1 ,但我想知道我在第二組SS2 –

回答

-1

信貸@Chiheb的Nexus

SS1=[(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 5, 6), (1, 2, 4, 5, 6), (1, 3, 4, 5, 6), (2, 3, 4, 5, 6)] 

from collections import Counter 

def get_new_list(a, pos): 
    # Check if any element in pos is > than the length of the tuples 
    if any(k >= len(min(SS1, key=lambda x: len(x))) for k in pos): 
     return 

    for k in a: 
     yield tuple(k[j] for j in pos) 

def elm_counter(elm): 
    if not len(elm): 
     return 

    c = Counter(elm) 
    for k, v in c.items(): 
     if v > 0: 
      print(k, v) 
elm = list(get_new_list(SS1, (2,))) 
elm_counter(elm) 
print('---')  
elm = list(get_new_list(SS1, (0, 2, 3))) 
elm_counter(elm) 
print('---') 
elm = list(get_new_list(SS1, (1, 3, 4))) 
elm_counter(elm) 
+0

我不知道這是否可以接受爲答案或不。我認爲你應該刪除這個問題,因爲它是從這個[answer](https://stackoverflow.com/questions/44494022/get-the-count-of-elements-of-tuples-of-your-own-not只是範圍或序列) –

0

好吧我假設你想要什麼作爲你的輸出這裏你並不清楚。所以基本上你想要的是在SS2的SS1中找到項目的計數。

例如這將是在SS1

存在的時間(1,4,5)數即在(1, 2, 3, 4, 5)(1, 2, 4, 5, 6)(1, 3, 4, 5, 6)

所以(1, 2, 5)這將是再次對不對?目前在 (1, 2, 3, 4, 5),(1, 2, 3, 5, 6),(1, 2, 4, 5, 6)

我想你可能需要的是。

set(tuple2).issubset(tuple1) 

因此,這裏是你的問題代碼:

SS1 = [(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 5, 6), (1, 2, 4, 5, 6), (1, 3, 4, 5, 6), (2, 3, 4, 5, 6)] 
SS2=[(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 2, 6), (1, 3, 4), (1, 3, 5), (1, 3, 6), (1, 4, 5), 
(1, 4, 6), (1, 5, 6), (2, 3, 4), (2, 3, 5), (2, 3, 6), (2, 4, 5), (2, 4, 6), (2, 5, 6), 
(3, 4, 5), (3, 4, 6), (3, 5, 6), (4, 5, 6)] 
count=0 
count_list = [] 
for ss2item in SS2: 
    for ss1item in SS1: 
     if set(ss2item).issubset(ss1item): 
      count+=1 
    count_list.append(count)   
    count=0 
print(count_list) 

它的輸出將是在SS2每個項目數的列表:

[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] 
+0

感謝您的企圖,這不是真的,我想要的和你建議的方式可能不是最快的蟒蛇,因爲我正在處理數百萬條記錄......所以計數器會是最好的coice ...謝謝你的朋友 –

+0

好的,然後會給出一個解決方案,如果你清楚指定輸出。但輸出是正確的? – void

+0

你可以看到我在這裏發佈的答案,我不能選擇我的答案,似乎需要等待兩天 –

相關問題