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

Bob*_*Bob 3 python list count python-3.x

鉴于清单

List2 = ['Apple', 'Apple', 'Apple', 'Black', 'Black', 'Black', 'Green', 'Green', 'Red', 'Yellow']
Run Code Online (Sandbox Code Playgroud)

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

for item in List2:
    newlist=[List2.count()] 
Run Code Online (Sandbox Code Playgroud)

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

newlist=[3,3,2,1,1]
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*nts 10

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

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})
Run Code Online (Sandbox Code Playgroud)

然后你可以根据自己喜欢的方式对它进行排序......

一种(低效)预订顺序的方法是计算,然后索引到原始列表:

>>> counts = Counter(li)
>>> [counts[key] for key in sorted(counts, key=li.index)]
[3, 3, 2, 1, 1]
Run Code Online (Sandbox Code Playgroud)

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

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

  • @JFSebastian:你显然没有看过上面的评论.请在再次回复之前阅读. (2认同)