我有两个列表,我想计算另一个列表中一个值列表的频率总和。a = [1,4,5]我想以有效的方式计算 a 在 b 中的频率总和:b = [2,1,4,1,5,6,3,2]输出应该是 4,即 2+1+1
3 回答
红颜莎娜
TA贡献1842条经验 获得超12个赞
看起来你需要。
a = [1,4,5]
b = [2,1,4,1,5,6,3,2]
print(sum(b.count(i) for i in a))
输出:
4
守着一只汪
TA贡献1872条经验 获得超3个赞
您可以使用集合中的计数器:
from collections import Counter
c = Counter(b)
sum(c[i] for i in a)
输出:
4
回首忆惘然
TA贡献1847条经验 获得超11个赞
你可以这样做,在每个列表上只迭代一次:
from collections import Counter
a = [1,4,5]
b = [2,1,4,1,5,6,3,2]
counter = Counter(b)
res = sum(counter[value] for value in a)
print(res)
# 4
Counter 只会在 上b迭代一次,然后我们迭代一次a以对相关计数求和,保持复杂度为 O(len(a) + len(b))。
sum(b.count(val) for val in a)但是,像 的方法将是 O(len(a) * len(b)),因为count必须b为 的每个项目再次迭代a。
添加回答
举报
0/150
提交
取消