Python統(tǒng)計不同整數(shù)的出現(xiàn)次數(shù)的三種方法
一、問題定義:什么是"不同整數(shù)的計數(shù)"?
假設(shè)有一個包含重復(fù)整數(shù)的列表:[1, 2, 3, 4, 2, 3, 4, 5],我們需要統(tǒng)計其中有多少個不重復(fù)的整數(shù)。答案顯然是5個(1,2,3,4,5)。
這個問題看似簡單,但實際應(yīng)用中常伴隨復(fù)雜場景:
- 數(shù)據(jù)量龐大(百萬級甚至億級)
- 需要實時統(tǒng)計
- 內(nèi)存資源有限
- 需要同時獲取出現(xiàn)次數(shù)
二、解決方案一:集合去重法(適合基礎(chǔ)場景)
核心思路:利用集合(Set)元素的唯一性自動去重。
my_list = [1, 2, 3, 4, 2, 3, 4, 5] unique_values = set(my_list) # 轉(zhuǎn)換為集合 count = len(unique_values) # 獲取集合長度 print(count) # 輸出:5
原理說明:
- set()函數(shù)將列表轉(zhuǎn)換為集合,自動過濾重復(fù)元素
- 集合的查找時間復(fù)雜度為O(1),適合快速判斷元素存在性
- 最終通過len()函數(shù)獲取集合大小,即不同整數(shù)數(shù)量
性能特點:
- 時間復(fù)雜度:O(n)(轉(zhuǎn)換集合)
- 空間復(fù)雜度:O(n)(存儲唯一值)
- 優(yōu)點:代碼簡潔,執(zhí)行速度快
- 缺點:無法獲取具體出現(xiàn)次數(shù)
三、解決方案二:字典計數(shù)法(適合需要頻次的場景)
核心思路:用字典存儲每個整數(shù)的出現(xiàn)次數(shù),最后統(tǒng)計字典鍵的數(shù)量。
my_list = [1, 2, 3, 4, 2, 3, 4, 5]
count_dict = {}
for num in my_list:
count_dict[num] = count_dict.get(num, 0) + 1 # 存在則+1,否則初始化為1
count = len(count_dict)
print(count) # 輸出:5原理說明:
- 遍歷列表時,用get()方法安全獲取當(dāng)前計數(shù)值
- count_dict.get(num, 0)表示:若num存在則返回計數(shù)值,否則返回0
- 最終通過字典的鍵數(shù)量獲取不同整數(shù)數(shù)量
擴展應(yīng)用:
- 獲取具體出現(xiàn)次數(shù):print(count_dict) 輸出{1:1, 2:2, 3:2, 4:2, 5:1}
- 查找最頻繁整數(shù):max(count_dict, key=count_dict.get)
性能特點:
- 時間復(fù)雜度:O(n)(單次遍歷)
- 空間復(fù)雜度:O(n)(存儲所有鍵值對)
- 優(yōu)點:可獲取詳細頻次信息
- 缺點:相比集合法需要額外存儲空間
四、解決方案三:collections.Counter(專業(yè)統(tǒng)計工具)
核心思路:使用Python標(biāo)準(zhǔn)庫中的Counter類,專為計數(shù)設(shè)計。
from collections import Counter my_list = [1, 2, 3, 4, 2, 3, 4, 5] counter = Counter(my_list) # 自動統(tǒng)計頻次 count = len(counter) # 獲取唯一值數(shù)量 print(count) # 輸出:5
進階用法:
# 獲取出現(xiàn)次數(shù)最多的3個整數(shù) print(counter.most_common(3)) # 輸出:[(2, 2), (3, 2), (4, 2)] # 數(shù)學(xué)運算(支持加減交并集) counter2 = Counter([5,6,6,7]) print(counter + counter2) # 合并統(tǒng)計 print(counter & counter2) # 交集統(tǒng)計
性能特點:
- 時間復(fù)雜度:O(n)(與字典法相當(dāng))
- 空間復(fù)雜度:O(n)
- 優(yōu)點:內(nèi)置豐富統(tǒng)計方法,代碼最簡潔
- 缺點:需要導(dǎo)入標(biāo)準(zhǔn)庫
五、性能對比與選型建議
| 方法 | 時間復(fù)雜度 | 空間復(fù)雜度 | 適用場景 |
|---|---|---|---|
| 集合去重法 | O(n) | O(n) | 僅需簡單計數(shù) |
| 字典計數(shù)法 | O(n) | O(n) | 需要頻次信息的中小型數(shù)據(jù) |
| Counter類 | O(n) | O(n) | 需要復(fù)雜統(tǒng)計的大型數(shù)據(jù) |
選型建議:
- 數(shù)據(jù)量小且無需頻次信息 → 集合去重法
- 需要頻次但數(shù)據(jù)量中等 → 字典計數(shù)法
- 專業(yè)數(shù)據(jù)分析/大數(shù)據(jù)場景 → collections.Counter
六、實戰(zhàn)案例:日志分析中的IP統(tǒng)計
需求:統(tǒng)計服務(wù)器日志中不同IP的訪問次數(shù),找出訪問最頻繁的10個IP。
from collections import Counter
# 模擬日志數(shù)據(jù)(每行包含IP地址)
log_lines = [
"192.168.1.1 - - [timestamp] \"GET / HTTP/1.1\"",
"10.0.0.5 - - [timestamp] \"POST /api\"",
"192.168.1.1 - - [timestamp] \"GET /css/style.css\"",
# ...(百萬級日志數(shù)據(jù))
]
# 提取IP地址
ips = [line.split()[0] for line in log_lines]
# 統(tǒng)計并輸出結(jié)果
ip_counter = Counter(ips)
print("不同IP數(shù)量:", len(ip_counter))
print("Top10 IP:", ip_counter.most_common(10))代碼解釋:
- 使用列表推導(dǎo)式高效提取IP地址
- Counter自動處理百萬級數(shù)據(jù)統(tǒng)計
- most_common(10)直接獲取高頻IP
七、總結(jié):智能時代的計數(shù)利器
不同整數(shù)的計數(shù)問題看似簡單,實則蘊含多種解決方案。在Python生態(tài)中:
- 集合提供了最基礎(chǔ)的去重能力
- 字典實現(xiàn)了頻次統(tǒng)計的基礎(chǔ)需求
- collections.Counter則是專業(yè)級統(tǒng)計工具
隨著數(shù)據(jù)規(guī)模的增長,合理選擇數(shù)據(jù)結(jié)構(gòu)變得尤為重要。對于智能時代的開發(fā)者而言,掌握這些計數(shù)方法,就如同擁有了精準(zhǔn)的數(shù)字顯微鏡,能夠高效洞察數(shù)據(jù)背后的規(guī)律。
以上就是Python統(tǒng)計不同整數(shù)的出現(xiàn)次數(shù)的三種方法的詳細內(nèi)容,更多關(guān)于Python統(tǒng)計不同整數(shù)出現(xiàn)次數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
閉包在python中的應(yīng)用之translate和maketrans用法詳解
這篇文章主要介紹了閉包在python中的應(yīng)用之translate和maketrans用法,是比較實用的技巧,需要的朋友可以參考下2014-08-08
Python實現(xiàn)softmax反向傳播的示例代碼
這篇文章主要為大家詳細介紹了Python實現(xiàn)softmax反向傳播的相關(guān)資料,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的可以了解一下2023-04-04
Python把PDF表格完整轉(zhuǎn)換成Excel的小白教程
本文通過一個完整的Python示例,詳細介紹了如何將多頁PDF表格轉(zhuǎn)換為Excel文件,文中包括整體思路、核心代碼解析、示例PDF模板及預(yù)期處理結(jié)果等內(nèi)容,旨在幫助用戶理解和掌握PDF表格處理技巧,需要的朋友可以參考下2026-04-04
安裝python-docx后,無法在pycharm中導(dǎo)入的解決方案
這篇文章主要介紹了安裝python-docx后,無法在pycharm中導(dǎo)入的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Python實現(xiàn)將VOC格式數(shù)據(jù)集轉(zhuǎn)換為YOLO格式數(shù)據(jù)集
本文將介紹如何將目標(biāo)檢測中常用的VOC格式數(shù)據(jù)集轉(zhuǎn)換為YOLO數(shù)據(jù)集,并進行數(shù)據(jù)集比例劃分,從而方便的進行YOLO目標(biāo)檢測,感興趣的小伙伴跟著小編一起來看看吧2025-06-06
從安裝到精通詳解Python包管理神器pip完全指南(小白友好版)
本文是一篇Python包管理工具pip的全面指南,從基礎(chǔ)到進階介紹了pip的核心功能和使用技巧,全文采用通俗易懂的語言,適合Python初學(xué)者,快跟隨小編一起學(xué)習(xí)一下吧2026-03-03
Python獲取當(dāng)前腳本文件夾(Script)的絕對路徑方法代碼
在本篇文章中小編給各位整理了關(guān)于Python獲取當(dāng)前腳本文件夾(Script)的絕對路徑實例代碼內(nèi)容,有需要的朋友們學(xué)習(xí)下。2019-08-08

