Python计数重复列表中的列表

时间:2019-03-21 09:43:16

标签: python

我有一个包含其他几个列表的列表。我想计算一个元素在所有这些列表中出现的频率。 例如:

my_list_of_lists=[[1,2,3,4],[1,2],[],[2,3,5]]

输出可能类似于:

1: 2
2: 3
3: 2
4: 1
5: 1

特定元素仅在单个列表中出现。

一些代码会很有帮助。
谢谢!

5 个答案:

答案 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}

我想指出,此任务的每个部分都可以用不同的方式完成,最重要的是,我想展示的是,在将任务划分为子任务之后,该任务可能变得更易于实现(或寻找现成的实现)。