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

Python 给定一个列表,如何计算该列表中的项目?,python,list,python-3.x,count,Python,List,Python 3.x,Count,给定列表 List2 = ['Apple', 'Apple', 'Apple', 'Black', 'Black', 'Black', 'Green', 'Green', 'Red', 'Yellow'] 我试图弄清楚如何计算列表中每个元素出现的次数。这必须是难以置信的简单,但我不明白。我在书中读到了有关计数函数的内容,并决定尝试实现它。我以为会是 for item in List2: newlist=[List2.count()] 我想这会让我得到我想要的: newlist=[3

给定列表

List2 = ['Apple', 'Apple', 'Apple', 'Black', 'Black', 'Black', 'Green', 'Green', 'Red', 'Yellow']
我试图弄清楚如何计算列表中每个元素出现的次数。这必须是难以置信的简单,但我不明白。我在书中读到了有关计数函数的内容,并决定尝试实现它。我以为会是

for item in List2:
    newlist=[List2.count()] 
我想这会让我得到我想要的:

newlist=[3,3,2,1,1]
但我收到一个打字错误,说count必须有一个参数。我对python非常陌生,所以如果可以的话,尽可能地将所有内容都哑下来。

您可以使用它,它会给您一个类似于
dict
的对象(因为它还有一些额外的功能,用于类似计数的目的),该对象的项为key,出现次数为value

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
(但这取决于项目的连续性):

您可以尝试以下方法:

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)}

如果您是Python新手,我认为编写解决方案代码比只导入一些东西更好。以下是一种简单易懂的方法:

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

为了保持秩序,您可以使用
类OrderedCounter(Counter,OrderedDict):pass
@J.F.Sebastian我很谦卑-这是我从未想到的:(非常感谢您从示例输入中,看起来项目应该是连续的……在这种情况下,
groupby
可能是最好的解决方案。(我可能会使用
ilen
函数,而不是将
len(list(g))
放在理解中,但是雅格尼。)@J.F.Sebastian:你确定这行得通吗?在2.7.2中OP的确切测试用例中,它似乎确实行得通,但在2.7.2中再添加一个
'Yellow'
,它会在
'Red':1
之前给我
'Yellow':2
。在3.3.0中,它甚至不适用于OP的测试用例。因此,我认为你在这里很幸运,它在ge中不起作用neral.@J.F.Sebastian:你显然没有阅读上面的评论。请在再次回复之前阅读。我不同意第一句话。最好学会如何使用“附带电池”,并通常寻找更简单、更高级的解决方案。无论是新程序员,还是来自C或Java等语言的程序员,都需要这种技能才能成为优秀的Python程序员。对于那些找不到所需电池的情况,也值得学习如何自己动手(或者想扩展你找到的一个)。但是只从下往上学习并不是一个好主意。@abarnert
从集合导入计数器
使你成为一个“优秀的Python程序员”?我非常不同意知道如何找到你需要的工具,以及如何使用它们,这使你成为一名优秀的Python程序员。一个能在两周内从头开始构建一个半途而废的脆弱HTML解析器的人比一个能在两小时内找到BeautifulSoup、阅读文档和编写有用代码的人帮助要小得多。@JonClements是的,你的代码显然更有用有效率,但这只是一个“没有意义”的选择。。。
counter = {}
for elem in List2:
    counter[elem] = counter.get(elem, 0) + 1