我有两个列表,我想计算另一个列表中一个值列表的频率之和。
a = [1,4,5]
我想以一种有效的方式来计算a在b中的频率之和:
b = [2,1,4,1,5,6,3,2]
输出应为4,即2 + 1 + 1
答案 0 :(得分:3)
看起来像您需要的。
a = [1,4,5]
b = [2,1,4,1,5,6,3,2]
print(sum(b.count(i) for i in a))
输出:
4
答案 1 :(得分:3)
您可以使用集合中的计数器:
from collections import Counter
c = Counter(b)
sum(c[i] for i in a)
输出:
4
答案 2 :(得分:3)
您可以这样做,在每个列表上仅重复一次:
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
。
答案 3 :(得分:0)