How to get the count of Custom tuples against two lists

荒凉一梦 提交于 2019-12-02 13:04:36

Ok I am assuming what you want as your output here as you weren't clear. So basically what you want is to find the count of items in SS1 in SS2.

e.g. The number of times (1,4,5) occuring in SS1

Which would be 3 i.e in (1, 2, 3, 4, 5),(1, 2, 4, 5, 6),(1, 3, 4, 5, 6)

so for (1, 2, 5) it would be 3 again right? present in (1, 2, 3, 4, 5),(1, 2, 3, 5, 6),(1, 2, 4, 5, 6)

I think what you might need is.

set(tuple2).issubset(tuple1)

So here is a code for your problem:

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)

It's output would be a list of count for each items in SS2:

[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]

credit to @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)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!