Python 如何统计由列表组成的数据集的元素

Python 如何统计由列表组成的数据集的元素,python,list,count,Python,List,Count,有一个数据集示例A=[[1,3,5],[2,3,5]] 我想知道使用计数器函数的每个元素1,2,3,5的频率 我想得到计数器('3':2,'5':2,'1':1,'2':2)的结果。使用计数器试试这个: from collections import Counter A = [[1,3,5],[2,3,5]] result = Counter([i for j in A for i in j]) 结果将是: Counter({1: 1, 3: 2, 5: 2, 2: 1}) 我想你指的是一

有一个数据集示例
A=[[1,3,5],[2,3,5]]
我想知道使用计数器函数的每个元素1,2,3,5的频率


我想得到计数器('3':2,'5':2,'1':1,'2':2)的结果。使用计数器试试这个:

from collections import Counter

A = [[1,3,5],[2,3,5]]
result = Counter([i for j in A for i in j])
结果将是:

Counter({1: 1, 3: 2, 5: 2, 2: 1})

我想你指的是一张名单

A=[[1,3,5],[2,3,5]]

如果是这样,可以使用numpy将其转换为展平阵列

import numpy
#turn A into a numpy array
arr =numpy.array(A)
#get the unique values and their counts - ravel flattens an array
unique,counts = numpy.unique(arr.ravel(),return_counts=True)
my_counts = dict(zip(unique,counts))
my_counts
>>>{1: 1, 2: 1, 3: 2, 5: 2}

计数器
支持加法,内置的和有一个参数,即ints的0元素。计数器的零元素就是
Counter()
。因此,您可以通过

from collections import Counter
A = [[1,2,5], [2, 3, 5]]
sum(Counter(l) for l in A, Counter())
给予

这也可以通过Map Reduce来解决,其中
Map
计数器的应用

from collections import Counter
from functools import reduce

A = [[1,2,5], [2, 3, 5]]
counters = [Counter(l) for l in A]
reduce(lambda x,y: x+y, counters)
给予


首先,列表是不可散列的,因此
A
不能是集合。 让我们把它列成一个列表

然后,我们将
计数器
应用于通过链接子列表获得的序列

永远不要重新发明轮子:itertools提供了伟大的解决方案

import collections as co
import itertools as it

A = [[1,3,5],[2,3,5]]
cnt = co.Counter(it.chain.from_iterable(A))
print(cnt)
产生

Counter({3: 2, 5: 2, 1: 1, 2: 1})

这是无效的语法:
A={[1,3,5],[2,3,5]}
所以我的意思是有一个由列表组成的数据集,我想知道关于datasetCounter的元素的频率不是一个函数,它是一个专用字典。数据集是如何定义的?值
2
只出现一次,而不是两次。欢迎。请检查答案旁边的灰色按钮并将其变为绿色:)@tedsong
import collections as co
import itertools as it

A = [[1,3,5],[2,3,5]]
cnt = co.Counter(it.chain.from_iterable(A))
print(cnt)
Counter({3: 2, 5: 2, 1: 1, 2: 1})