首页 > 解决方案 > 查找列表中各个组的出现次数

问题描述

“所以,我得到了一份清单——

group = [2,1,3,4]

此列表的每个索引代表一个组。所以group 0 = 2

group 1 = 1
group 2 = 3 
group 3 = 4

我得到了另一个名为:

l =[[[0, 0, 3, 3, 3, 3], [0, 0, 1, 3, 3, 3, 3]], [[0, 1]], [[2, 2, 2, 3, 3, 3, 3], [2, 2, 2, 3, 3, 3, 3], [2, 2, 2, 3, 3, 3, 3]], [[0, 0, 2, 2, 2, 3, 3, 3], [0, 0, 2, 2, 2, 3, 3, 3], [0, 0, 2, 2, 2, 3, 3, 3, 3], [0, 0, 2, 2, 2, 3, 3, 3, 3]]]

我想要的输出是:

dict = {0:[0,3],1;[1],2:[2,3],3:[0,2]}

如果元素在 l 的每个子列表中出现的次数,即如果 l[0][0] 和 l[0][1] 都有 0 出现 2 次,则将其添加到 dict 的索引 0 中。由于l[0][0]and l[0][1]have 3 都出现了 4 次(这是因为 group[3] 是 4),它被添加到索引 0。现在l[1][0]和 0 只出现一次(而不是两次),所以它没有添加到索引 1。但是 1只出现一次,所以它被添加到索引 1。谢谢!

到目前为止我已经尝试过:

def tryin(l,groups):
    for i in range(len(l)):
        count = 0
        for j in range(len(l[i])):
            if j in (l[i][j]):
                count+=1
                if count == groups[i]:
                    print(i,j)

标签: python-3.x

解决方案


试试这个代码:

输入:

group = [2,1,3,4]
l =[[[0, 0, 3, 3, 3, 3], [0, 0, 1, 3, 3, 3, 3]], [[0, 1]], [[2, 2, 2, 3, 3, 3, 3], [2, 2, 2, 3, 3, 3, 3], [2, 2, 2, 3, 3, 3, 3]], [[0, 0, 2, 2, 2, 3, 3, 3], [0, 0, 2, 2, 2, 3, 3, 3], [0, 0, 2, 2, 2, 3, 3, 3, 3], [0, 0, 2, 2, 2, 3, 3, 3, 3]]]



def IntersecOfSets(list_):
    result = set(list_[0])
    for s in list_[1:]:
        result.intersection_update(s)

        return result
def nb_occ(l,group):
    d = {}
    for i in l:
        l2=[]
        for j in i:
            l1 = []
            for x in group:

                if j.count(group.index(x)) >= x :
                    y=group.index(x)
                    l1.append(y)
            l2.append(l1)
        if len(l2)>1:
            d[str(l.index(i))]= IntersecOfSets(l2)
        else:
            d[str(l.index(i))]= l2[0]
    return d
print(nb_occ(l,group))

输出:

{'2': {2, 3}, '1': [1], '0': {0, 3}, '3': {0, 2}}

推荐阅读