- Python進階編程:編寫更高效、優(yōu)雅的Python代碼
- 劉宇宙 謝東 劉艷
- 515字
- 2021-04-30 12:39:42
3.1.4 序列元素統(tǒng)計
在工作過程中,我們經(jīng)常需要找到一個序列中某個出現(xiàn)次數(shù)最多的字符或數(shù)字。在Python中是否有函數(shù)支持快速尋找字符或數(shù)字呢?
collections.Counter類就是專門針對這類問題而設計的,甚至使用most_common()方法即可直接獲取答案。
假設要從一個單詞列表中找出哪個單詞出現(xiàn)頻率最高,代碼(most_times_exp.py)示例如下:
from collections import Counter words = [ 'python', 'c++', 'abc', 'php', 'mysql', 'java', 'c#', '.net', 'ruby', 'lisp', 'python', 'python', 'mongodb', 'hive', 'spark', 'go', 'vb', 'java', "python", 'c', 'ios', 'sql', 'python', 'java', 'c++', 'hbase', 'go', "java", 'c++' ] word_counts = Counter(words) frequency_num = 2 # 出現(xiàn)頻率最高的 frequency_num 個單詞 top_three = word_counts.most_common(frequency_num) print(f'出現(xiàn)頻率最高的{frequency_num}個單詞是:{top_three}')
執(zhí)行py文件,輸出結(jié)果如下:
出現(xiàn)頻率最高的2個單詞是:[('python', 5), ('java', 4)]
作為輸入,Counter對象可以接收任意由可哈希(Hashable)元素構(gòu)成的序列對象。在底層實現(xiàn)上,一個Counter對象就是一個字典——一個將元素映射為它出現(xiàn)的次數(shù)上的字典,示例如下:
print(f"python出現(xiàn)頻率:{word_counts['python']}") print(f"go出現(xiàn)頻率:{word_counts['go']}")
如果想手動增加計數(shù),可以簡單地使用加法,示例如下:
more_words = ['python','java','go'] for word in more_words: word_counts[word] += 1 print(f"python出現(xiàn)頻率:{word_counts['python']}") print(f"go出現(xiàn)頻率:{word_counts['go']}")
或者可以使用update()方法,示例如下:
word_counts.update(more_words)
Counter實例的一個鮮為人知的特性是它可以很容易地與數(shù)學運算操作相結(jié)合,示例如下:
a_obj = Counter(words) b_obj = Counter(more_words) print(f'the object of a is:{a_obj}') print(f'the object of b is:{b_obj}') c_obj = a_obj + b_obj print(f'the object of c is:{c_obj}') d_obj = a_obj - b_obj print(f'the object of d is:{d_obj}')
Counter對象在需要制表或者計數(shù)的場合是非常有用的。建議在解決這類問題的時候應該優(yōu)先選擇它,而不是手動地利用字典去實現(xiàn)。
推薦閱讀
- Design Principles for Process:driven Architectures Using Oracle BPM and SOA Suite 12c
- Data Analysis with IBM SPSS Statistics
- 快速念咒:MySQL入門指南與進階實戰(zhàn)
- Hands-On Full Stack Development with Go
- JavaCAPS基礎(chǔ)、應用與案例
- Java系統(tǒng)化項目開發(fā)教程
- Node.js:來一打 C++ 擴展
- Microsoft Azure Storage Essentials
- 編程菜鳥學Python數(shù)據(jù)分析
- Test-Driven Development with Django
- Java程序設計案例教程
- ASP.NET求職寶典
- Google Adsense優(yōu)化實戰(zhàn)
- Python深度學習入門:從零構(gòu)建CNN和RNN
- 亮劍Java Web項目開發(fā)案例導航