2013-12-08 51 views
0

我相信這應該是非常簡單的,但似乎我無法直截了當地做出正確的選擇。使用計數器選擇Python列表中的所有主要單詞

我有一個列表如下:

comp = [Amazon, Apple, Microsoft, Google, Amazon, Ebay, Apple, Paypal, Google] 

我只想打印所發生的大部分話。我做了以下內容:

cnt = Counter(comp.split(',')) 
final_list = cnt.most_common(2) 

這給了我下面的輸出:

[[('Amazon', 2), ('Apple', 2)]] 

我不知道什麼參數傳中most_common(),因爲它可以爲每個輸入列表不同。所以,我想知道我能如何打印出現的單詞,比如3個單詞列表或4個單詞列表。因此,對於上面的示例中,輸出如下:

[[('Amazon', 2), ('Apple', 2), ('Google',2)]] 

感謝

+0

你使用Python 2.7還是Python 3.2?你能給我們更多的細節嗎? – Bugboy1028

+0

我在Python 2.7 – visakh

+0

亞馬遜在列表中重複3次,輸出結果顯示爲2. –

回答

3

您可以使用itertools.takewhile這裏:

>>> from itertools import takewhile 
>>> lis = ['Amazon', 'Apple', 'Microsoft', 'Google', 'Amazon', 'Ebay', 'Apple', 'Paypal', 'Google'] 
>>> c = Counter(lis) 
>>> items = c.most_common() 

獲取最大計數:

>>> max_ = items[0][1] 

其中count = max_,並儘快停止與少計的項目被發現,只選擇那些項目:

>>> list(takewhile(lambda x: x[1]==max_, items)) 
[('Google', 2), ('Apple', 2), ('Amazon', 2)] 

你誤解Counter.most_common

most_common(self, n=None) 

名單最常見的元素和它們從最常見的 到最少的數量。如果n爲無,則列出所有元素計數。

n這裏不算,它是你想要返回的頂級物品的數量。它基本上相當於:

>>> c.most_common(4) 
[('Google', 2), ('Apple', 2), ('Amazon', 2), ('Paypal', 1)] 
>>> c.most_common()[:4] 
[('Google', 2), ('Apple', 2), ('Amazon', 2), ('Paypal', 1)] 
3

爲此,您可以通過維護兩個變量maximaxi_value存儲的最大元素,沒有的時候就已經發生。

dict = {} 
maxi = None 
maxi_value = 0 
for elem in comp: 
    try: 
     dict[elem] += 1 
    except IndexError: 
     dict[elem] = 1 
    if dict[elem] > mini_value: 
     mini = elem 
print (maxi) 
1

查找頂一個詞的出現次數的數量,然後篩選由most_common返回的整個列表:

>>> mc = cnt.most_common() 
>>> filter(lambda t: t[1] == mc[0][1], mc) 
相關問題