一道关于list的问题,卡住了不知道怎么解决
刚开始学python 不会写这个代码 希望各位能帮帮忙解答我的问题!
代码可这样写,从函数名来看,是统计至少出现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)
上面函数测试输出跟题目注释一致。