另一个列表中的值列表的频率总和

时间:2019-03-29 10:32:57

标签: python list

我有两个列表,我想计算另一个列表中一个值列表的频率之和。

a = [1,4,5]

我想以一种有效的方式来计算a在b中的频率之和:

b = [2,1,4,1,5,6,3,2]

输出应为4,即2 + 1 + 1

4 个答案:

答案 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)

您可以在列表理解中使用.count()方法:

sum([b.count(i) for i in a])

输出:

  

4