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])

Sums start and the items of an iterable from left to right and returns the total

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)