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

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

a = [1,4,5]

我想以有效的方式计算 a 在 b 中的频率总和:

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

输出应该是 4,即 2+1+1


九州编程
浏览 162回答 3
3回答

红颜莎娜

看起来你需要。a = [1,4,5]b = [2,1,4,1,5,6,3,2]print(sum(b.count(i) for i in a))输出:4

守着一只汪

您可以使用集合中的计数器:from collections import Counterc = Counter(b)sum(c[i] for i in a)输出:4

回首忆惘然

你可以这样做,在每个列表上只迭代一次:from collections import Countera = [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)# 4Counter 只会在 上b迭代一次,然后我们迭代一次a以对相关计数求和,保持复杂度为 O(len(a) + len(b))。sum(b.count(val) for val in a)但是,像 的方法将是 O(len(a) * len(b)),因为count必须b为 的每个项目再次迭代a。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python