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

问题描述 投票:0回答:4

给定列表

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 非常陌生,所以如果可以的话,请尽可能简化所有内容。

python list python-3.x count
4个回答
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
投票

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

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

0
投票

您收到错误

count has to have an argument
的原因是因为
count()
函数需要参数。如果你不知道该数什么,你就无法数数。 因此,您可以利用 for 循环对每个项目进行计数,并将每个计数附加到新列表中。此外,由于您不想重新计数某个项目,因此您想检查该项目是否已被检查。

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

newlist = [] #Create the new list
checkedlist = []

for item in List2: #for loop that sets item to be each item in the list

    if item not in checkedlist: #checks if the item is in the list of items that have already been counted

        newlist.append(List2.count(item)) #counts the item
        checkedlist.append(item) #add the item to the list of already counted items after counting

-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)}
© www.soinside.com 2019 - 2024. All rights reserved.