簡體   English   中英

總結python中的計數器列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM