我有兩個列表,我想計算另一個列表中一個值列表的頻率總和。a = [1,4,5]我想以有效的方式計算 a 在 b 中的頻率總和:b = [2,1,4,1,5,6,3,2]輸出應該是 4,即 2+1+1
3 回答

紅顏莎娜
TA貢獻1842條經驗 獲得超13個贊
看起來你需要。
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條經驗 獲得超4個贊
您可以使用集合中的計數器:
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
提交
取消