簡體   English   中英

給定一個列表,如何計算該列表中的項目?

[英]Given a list, How to count items in that list?

鑒於清單

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非常陌生,如果可能的話,盡可能地減少所有內容。

您可以使用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})

然后你可以根據自己喜歡的方式對它進行排序......

一種(低效)預訂順序的方法是計算,然后索引到原始列表:

>>> 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]

如果您是Python新手,我認為您可以更好地編寫解決方案而不是僅僅導入內容。 這是一個簡單易懂的方法:

counter = {}
for elem in List2:
    counter[elem] = counter.get(elem, 0) + 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)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM