我有一个包含其他几个列表的列表。我想计算一个元素在所有这些列表中出现的频率。 例如:
my_list_of_lists=[[1,2,3,4],[1,2],[],[2,3,5]]
输出可能类似于:
1: 2
2: 3
3: 2
4: 1
5: 1
特定元素仅在单个列表中出现。
一些代码会很有帮助。
谢谢!
答案 0 :(得分:2)
>>> from collections import Counter
>>> ct = Counter([jtem for item in a for jtem in item])
>>> ct
Counter({2: 3, 1: 2, 3: 2, 4: 1, 5: 1})
OR
>>> from itertools import chain
>>> from collections import Counter
>>>
>>> ct = Counter(chain.from_iterable(a))
>>> ct
Counter({2: 3, 1: 2, 3: 2, 4: 1, 5: 1})
这应该对您有帮助。
答案 1 :(得分:1)
使用Monoid
from collections import Counter
Counter(sum(my_list_of_lists, []))
答案 2 :(得分:0)
d={}
#l is the given list
for l1 in l:
#l1 is nested list
for j in l1:
#j is element
if j in d.keys():
d[j]+=1
else:
d[j]=1
您有一个dict d,其中元素作为键,值作为元素数。
答案 3 :(得分:0)
出于完整性考虑,您也可以使用numpy:
import numpy as np
my_list_of_lists=[[1,2,3,4],[1,2],[],[2,3,5]]
np_array_of_arrays = np.concatenate([np.array(i) for i in my_list_of_lists])
d = dict(zip(*np.unique(np_array_of_arrays , return_counts=True)))
print(d)
{1.0: 2, 2.0: 3, 3.0: 2, 4.0: 1, 5.0: 1}
答案 4 :(得分:0)
首先,您应该将list
中的list
变平,这样就变成list
,您可以按照以下方式进行操作:
data = [[1,2,3,4],[1,2],[],[2,3,5]]
flat = sum(data,[])
现在flat
是[1, 2, 3, 4, 1, 2, 2, 3, 5]
,现在我们可以获得唯一元素:
uniq = list(set(flat))
最后,我们可以获得发生的次数并将其存储在dict
中:
quantity = {i:flat.count(i) for i in uniq}
哪个是
print(quantity) #{1: 2, 2: 3, 3: 2, 4: 1, 5: 1}
我想指出,此任务的每个部分都可以用不同的方式完成,最重要的是,我想展示的是,在将任务划分为子任务之后,该任务可能变得更易于实现(或寻找现成的实现)。