2017-06-12 83 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

你可以看到我在这里发布的答案,我不能选择我的答案,似乎需要等待两天 –

相关问题