[英]Summing list of counters in python
我想在 python 中總結一個計數器列表。 例如求和:
counter_list = [Counter({"a":1, "b":2}), Counter({"b":3, "c":4})]
給Counter({'b': 5, 'c': 4, 'a': 1})
我可以得到以下代碼來進行求和:
counter_master = Counter()
for element in counter_list:
counter_master = counter_master + element
但我很困惑為什么counter_master = sum(counter_list)
導致錯誤TypeError: unsupported operand type(s) for +: 'int' and 'Counter'
? 鑒於可以將計數器加在一起,為什么不能將它們相加?
sum
函數具有可選的start參數,默認為 0。引用鏈接頁面:
sum(iterable[, start])
從左到右對開始和可迭代項的總和並返回總數
將start設置為(空) Counter
對象以避免TypeError
:
In [5]: sum(counter_list, Counter())
Out[5]: Counter({'b': 5, 'c': 4, 'a': 1})
根據我的經驗,這個版本更快。 這是 O(log(n)) 的上限。
def sum_counters(counter_list):
'''
Recursive counter with a O(log(n)) Complexity
'''
if len(counter_list) > 10:
counter_0 = sum_counters(counter_list[:int(len(counter_list)/2)])
counter_1 = sum_counters(counter_list[int(len(counter_list)/2):])
return sum([counter_0, counter_1], Counter())
else:
return sum(counter_list, Counter())
global_counter = sum_counters(counter_list)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.