[英]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.