求解python問題 查找三個list中出現K次的數值 並合并成一個list

一道关于list的问题,卡住了不知道怎么解决
刚开始学python 不会写这个代码 希望各位能帮帮忙解答我的问题!

img

代码可这样写,从函数名来看,是统计至少出现k次的:

def appear_at_least_k(t, k):
    n = [x for a in t for x in a]
    m = set(n)
    d = {}
    res = []
    for i in m:
        d[i] = n.count(i)
    for key, value in d.items():        
        if value >= k:
            res.append(key)
    return res

a1 = [1, 2, 3, 4]
a2 = [1, 2, 3, 5, 5, 6]
a3 = [1, 7, 7, 7]
print(appear_at_least_k((a1, a2, a3), 1))
print(appear_at_least_k((a1,a2,a3),2))
print(appear_at_least_k((a1,a2,a3),3))
print(appear_at_least_k((a1,a2,a3),4))

运行结果:

[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 5, 7]
[1, 7]
[]

如对你有帮助,请点击一下本回答的采纳按钮给予采纳。

从题目给出的数据来看,是要找出在k个列表中都出现的数字个数,而不是统计总共出现的次数。

我给出的函数实现更加通用,不局限于只有3个列表,n个列表都支持。

import itertools

def appear_at_least_k(t, k):
    if k > len(t) or k < 1:
        return []

    t = [set(l) for l in t]
    combos = itertools.combinations(t, k)
    result = set()
    for combo in combos:
        c = combo[0]
        for i in range(1, k):
            c &= combo[i]
        result |= c
    return list(result)

上面函数测试输出跟题目注释一致。