如何计算多层数组中的值?

时间:2019-08-24 11:54:29

标签: arrays python-3.x collections

是否有一种简单的方法可以像这样计算多层数组中的值?

from collections import Counter

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

print(Counter(a))

输出:

Traceback (most recent call last):
  File "/home/artur/Desktop/test.py", line 6, in <module>
    print(Counter(a))
  File "/usr/lib/python3.7/collections/__init__.py", line 566, in __init__
    self.update(*args, **kwds)
  File "/usr/lib/python3.7/collections/__init__.py", line 653, in update
    _count_elements(self, iterable)
TypeError: unhashable type: 'list'

2 个答案:

答案 0 :(得分:1)

您首先需要使用生成器表达式来展平列表,现在您正在计算列表,而不是列表中的元素:

>>> print(Counter(i for b in a for i in b))
Counter({1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1})

使用mapfunctools.reduce

>>> from functools import reduce
>>> print(reduce(Counter.__add__, map(Counter, a)))
Counter({1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1})

如果您需要分别为每个子列表计数,请改用此列表理解:

>>> print([Counter(b) for b in a])
[Counter({1: 1, 2: 1, 3: 1}), Counter({4: 1, 5: 1, 6: 1})]

答案 1 :(得分:0)

您可以这样简单地计数

a = [[1,2,3],[4,5,6]]
print(sum(len(a) for a in a))
  

给您算为6