Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)找出序列中出現(xiàn)次數(shù)最多的元素算法示例
本文實例講述了Python找出序列中出現(xiàn)次數(shù)最多的元素。分享給大家供大家參考,具體如下:
問題:找出一個元素序列中出現(xiàn)次數(shù)最多的元素是什么
解決方案:collections模塊中的Counter類正是為此類問題所設(shè)計的。它的一個非常方便的most_common()方法直接告訴你答案。
# Determine the most common words in a list
words = [
'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
'my', 'eyes', "you're", 'under'
]
from collections import Counter
word_counts = Counter(words)
top_three = word_counts.most_common(3)
print(top_three)
# outputs [('eyes', 8), ('the', 5), ('look', 4)]
# Example of merging in more words
morewords = ['why','are','you','not','looking','in','my','eyes']
word_counts.update(morewords) #使用update()增加計數(shù)
print(word_counts.most_common(3))
>>> ================================ RESTART ================================
>>>
[('eyes', 8), ('the', 5), ('look', 4)]
[('eyes', 9), ('the', 5), ('my', 4)]
>>>
在底層實現(xiàn)中,Counter是一個字典,在元素和它們出現(xiàn)的次數(shù)間做了映射。
>>> word_counts
Counter({'eyes': 9, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'why': 1, 'in': 1})
>>> word_counts.most_common(3) #top_three
[('eyes', 9), ('the', 5), ('my', 4)]
>>> word_counts['not']
2
>>> word_counts['eyes']
9
>>> word_counts['eyes']+1
10
>>> word_counts
Counter({'eyes': 9, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'why': 1, 'in': 1})
>>> word_counts['eyes']=word_counts['eyes']+1 #手動增加元素計數(shù)
>>> word_counts
Counter({'eyes': 10, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'why': 1, 'in': 1})
>>>
增加元素出現(xiàn)次數(shù)可以通過手動進行增加,也可以借助update()方法;
另外,Counter對象另一個特性是它們可以同各種數(shù)學(xué)運算操作結(jié)合起來使用:
>>> a=Counter(words)
>>> a
Counter({'eyes': 8, 'the': 5, 'look': 4, 'my': 3, 'into': 3, 'around': 2, 'under': 1, "you're": 1, 'not': 1, "don't": 1})
>>> b=Counter(morewords)
>>> b
Counter({'not': 1, 'my': 1, 'in': 1, 'you': 1, 'looking': 1, 'are': 1, 'eyes': 1, 'why': 1})
>>> c=a+b
>>> c
Counter({'eyes': 9, 'the': 5, 'my': 4, 'look': 4, 'into': 3, 'around': 2, 'not': 2, "don't": 1, 'under': 1, 'are': 1, 'looking': 1, "you're": 1, 'you': 1, 'in': 1, 'why': 1})
>>> # substract counts
>>> d=a-b
>>> d
Counter({'eyes': 7, 'the': 5, 'look': 4, 'into': 3, 'my': 2, 'around': 2, 'under': 1, "you're": 1, "don't": 1})
>>>
當(dāng)面對任何需要對數(shù)據(jù)制表或計數(shù)的問題時,Counter對象都是你手邊的得力工具。比起利用字典自己手寫算法,更應(yīng)采用該方式完成任務(wù)。
(代碼摘自《Python Cookbook》)
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
Pyside2中嵌入Matplotlib的繪圖的實現(xiàn)
這篇文章主要介紹了Pyside2中嵌入Matplotlib的繪圖的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
用Python的SimPy庫簡化復(fù)雜的編程模型的介紹
這篇文章主要介紹了用Python的SimPy庫簡化復(fù)雜的編程模型的介紹,本文來自于官方的開發(fā)者技術(shù)文檔,需要的朋友可以參考下2015-04-04
python獲取屏幕截圖區(qū)域坐標(biāo)簡單代碼和思路
這篇文章主要介紹了python獲取屏幕截圖區(qū)域坐標(biāo)的相關(guān)資料,文章介紹了一個獲取屏幕截圖區(qū)域信息的簡單方法,通過鼠標(biāo)操作確定截圖區(qū)域的左上角和右下角坐標(biāo),計算出區(qū)域的寬度和高度,并返回這些參數(shù),以便進行后續(xù)的數(shù)字識別和比較操作,需要的朋友可以參考下2024-11-11
python實現(xiàn)會員信息管理系統(tǒng)(List)
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)會員信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Python學(xué)習(xí)之函數(shù)的定義與使用詳解
函數(shù)是具有某種特定功能的代碼塊,可以重復(fù)使用(在前面數(shù)據(jù)類型相關(guān)章節(jié)。它使得我們的程序更加模塊化,不需要編寫大量重復(fù)的代碼。本文將詳細(xì)介紹Python中函數(shù)的定義與使用,感興趣的可以學(xué)習(xí)一下2022-03-03

