给定一个列表,如何计算该列表中的项目?

时间:2013-03-16 03:08:25

标签: python list python-3.x count

给出清单

List2 = ['Apple', 'Apple', 'Apple', 'Black', 'Black', 'Black', 'Green', 'Green', 'Red', 'Yellow']

我试图弄清楚如何计算列表中每个元素出现的次数。这必须非常简单,但我无法弄清楚。我在书中读到了关于count函数的内容,我决定尝试实现它。我以为会是......

for item in List2:
    newlist=[List2.count()] 

我认为这会引导我达到我的目的:

newlist=[3,3,2,1,1]

但我收到一个TypeError,说count必须有一个参数。我对python非常陌生,如果可能的话,尽可能地将所有内容都愚蠢。

3 个答案:

答案 0 :(得分:10)

您可以使用collections.Counter为您提供一个dict类似对象(因为它还有一些对 count 类似的用途有用的附加功能),它具有键作为项目,以及作为出现次数的值。

from collections import Counter


>>> li = ['Apple', 'Apple', 'Apple', 'Black','Black','Black','Green','Green','Red','Yellow']    
>>> Counter(li)
Counter({'Black': 3, 'Apple': 3, 'Green': 2, 'Yellow': 1, 'Red': 1})

然后你可以根据自己的喜好进行排序......

预先获得订单的一种(低效)方式是计数,然后索引到原始列表中:

>>> counts = Counter(li)
>>> [counts[key] for key in sorted(counts, key=li.index)]
[3, 3, 2, 1, 1]

另一种方法是使用groupby(但这取决于连续的项目):

>>> from itertools import groupby
>>> [len(list(g)) for k, g in groupby(li)]
[3, 3, 2, 1, 1]

答案 1 :(得分:1)

如果您是Python的新手,我认为您可以更好地编写解决方案而不仅仅是导入某些内容。这是一种简单易懂的方法:

counter = {}
for elem in List2:
    counter[elem] = counter.get(elem, 0) + 1

答案 2 :(得分:-1)

你可以试试这个:

new_list = [List2.count(x) for x in set(List2)]

这相当于:

new_list = []
for x in set(List2):
    new_list.append(List2.count(x))

或者是字典:

new_dict = {x:List2.count(x) for x in set(List2)}