是否有一种简单的方法可以像这样计算多层数组中的值?
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'
答案 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})
使用map
和functools.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