给出清单
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非常陌生,如果可能的话,尽可能地将所有内容都愚蠢。
答案 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)}