Python:统计嵌套列表中每个元素的出现次数

-2 投票
3 回答
1140 浏览
提问于 2025-04-18 13:03

我刚开始学习编程,想要统计一个列表中每个项目出现的次数。下面是我处理的一个列表的例子:

GC = [[5,4,3,2,1],[9,8,7,6,5,4,3,2],[4,3,2,1],[10,9,8,7,6,5,4]]

然后我想把结果打印成两列。第一列是列表中元素的范围,第二列是每个元素出现的总次数。

3 个回答

0

如果你刚开始接触编程,可能是在尝试了解循环是怎么工作的。在这种情况下,下面的例子可能会对你有帮助。不过要注意,这并不是最有效的方法,可以参考上面sshank124或Padraic Cunningham的回答。

GC = [[5,4,3,2,1],[9,8,7,6,5,4,3,2],[4,3,2,1],[10,9,8,7,6,5,4]]

nums = list(set(flatten(GC)))
occurances = []

for i in nums:        
    p = 0

    for i2 in GC:   
        for k2 in i2:  
            if i == k2:   
                p += 1   

    occurances.append(p)  # save total count in list
print zip(nums, occurances)
1

如果你想把每个数字和它的数量放在不同的列里:

l = [[5,4,3,2,1],[9,8,7,6,5,4,3,2],[4,3,2,1],[10,9,8,7,6,5,4]]

flattened = ([x for y in l for x in y])
counts = [[ele,flattened.count(ele)]for ind, ele in enumerate(set(flattened))]
print counts 
[[1, 2], [2, 3], [3, 3], [4, 4], [5, 3], [6, 2], [7, 2], [8, 2], [9, 2], [10, 1]]
3

你可以很简单地使用一些内置的库或模块来实现这个功能:

from itertools import chain
from collections import Counter

l = [[5,4,3,2,1],[9,8,7,6,5,4,3,2],[4,3,2,1],[10,9,8,7,6,5,4]]

l = chain.from_iterable(l)

print Counter(l)

chain.from_iterable(l) 这个方法可以把一个列表变成一维的,也就是把里面的所有元素都放在一起。然后,Counter 这个构造函数会创建一个计数器对象,简单来说就是一个字典,它把每个独特的元素和它在列表中出现的次数对应起来。

撰写回答