玩轉python:通俗易懂掌握高級數據結構-collections模塊之Counter

引言

Counter是Python中collections模塊提供的一個強大工具,用于統計可哈希對象的出現次數。它非常適合用于頻率統計、詞頻分析、數據聚合等場景。本文將詳細介紹Counter的關鍵用法和特性,并通過8個豐富的案例幫助讀者掌握其應用。


關鍵用法和特性表格
特性/方法描述
統計頻率快速統計可哈希對象的出現次數。
字典子類Counterdict的子類,支持所有字典操作。
初始化使用Counter(iterable)Counter(mapping)創建。
elements()返回一個迭代器,包含所有元素(按出現次數重復)。
most_common(n)返回出現次數最多的n個元素及其計數。
update(iterable)更新計數器,增加元素的計數。
subtract(iterable)更新計數器,減少元素的計數。
算術操作支持加法(+)、減法(-)、交集(&)、并集(|)操作。

1. Counter的概念

Countercollections模塊中的一個類,用于統計可哈希對象的出現次數。它的主要特點是:

  • 統計頻率:快速統計元素的出現次數。
  • 字典子類:支持所有字典操作,如鍵值訪問、更新等。
  • 高效性能:統計和更新操作的時間復雜度為O(1)。

2. Counter的用法

2.1 創建Counter
from collections import Counter# 從列表創建Counter
c = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'apple'])
print(c)  # 輸出: Counter({'apple': 3, 'banana': 2, 'orange': 1})# 從字符串創建Counter
c = Counter('abracadabra')
print(c)  # 輸出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
2.2 訪問元素計數
# 訪問元素的計數
print(c['a'])  # 輸出: 5
print(c['z'])  # 輸出: 0(不存在時返回0)
2.3 更新計數器
# 更新計數器
c.update(['a', 'b', 'a'])
print(c)  # 輸出: Counter({'a': 7, 'b': 3, 'r': 2, 'c': 1, 'd': 1})

3. Counter的常見方法

3.1 elements():返回所有元素
# 返回所有元素(按計數重復)
print(list(c.elements()))  # 輸出: ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'r', 'r', 'c', 'd']
3.2 most_common(n):返回最常見的元素
# 返回最常見的2個元素
print(c.most_common(2))  # 輸出: [('a', 7), ('b', 3)]
3.3 subtract(iterable):減少元素計數
# 減少元素計數
c.subtract(['a', 'b', 'a'])
print(c)  # 輸出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
3.4 算術操作
# 加法操作
c1 = Counter(['a', 'b', 'a'])
c2 = Counter(['b', 'c', 'b'])
print(c1 + c2)  # 輸出: Counter({'a': 2, 'b': 3, 'c': 1})# 交集操作
print(c1 & c2)  # 輸出: Counter({'b': 1})

4. Counter的8個應用案例

案例1:統計詞頻
# 統計一段文本的詞頻
text = "Python is great. Python is easy. Python is powerful."
words = text.split()
word_count = Counter(words)
print(word_count)  # 輸出: Counter({'Python': 3, 'is': 3, 'great.': 1, 'easy.': 1, 'powerful.': 1})
案例2:統計字符頻率
# 統計字符串中字符的頻率
s = "abracadabra"
char_count = Counter(s)
print(char_count)  # 輸出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
案例3:找出最常見的元素
# 找出列表中最常見的元素
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
c = Counter(data)
print(c.most_common(2))  # 輸出: [(4, 4), (3, 3)]
案例4:統計文件中的單詞頻率
# 統計文件中單詞的頻率
with open('example.txt', 'r') as file:words = file.read().split()word_count = Counter(words)print(word_count.most_common(5))  # 輸出文件中出現頻率最高的5個單詞
案例5:數據聚合
# 統計多個數據集的聚合結果
data1 = ['apple', 'banana', 'apple']
data2 = ['banana', 'orange', 'banana']
c1 = Counter(data1)
c2 = Counter(data2)
combined = c1 + c2
print(combined)  # 輸出: Counter({'banana': 3, 'apple': 2, 'orange': 1})
案例6:統計投票結果
# 統計投票結果
votes = ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob', 'Alice']
vote_count = Counter(votes)
print(vote_count.most_common(1))  # 輸出: [('Alice', 3)]
案例7:統計列表中元素的頻率
# 統計列表中元素的頻率
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
c = Counter(data)
print(c)  # 輸出: Counter({4: 4, 3: 3, 2: 2, 1: 1})
案例8:統計多個計數器的交集
# 統計多個計數器的交集
c1 = Counter(['a', 'b', 'a'])
c2 = Counter(['b', 'c', 'b'])
print(c1 & c2)  # 輸出: Counter({'b': 1})

總結

Counter是Python中一個非常實用的工具,能夠快速統計元素的出現次數,并支持豐富的操作。通過本文的詳細講解和8個實際案例,讀者可以快速掌握Counter的使用方法,并在實際項目中靈活應用。無論是詞頻統計、數據聚合,還是投票分析,Counter都能輕松應對!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73505.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73505.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73505.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DeepSeek面試——分詞算法

DeepSeek-V3 分詞算法 一、核心算法:字節級BPE(Byte-level BPE,BBPE) DeepSeek-V3 采用 字節級BPE(BBPE) 作為核心分詞算法,這是對傳統 BPE(Byte Pair Encoding)算法的…

機器學習——正則化、欠擬合、過擬合、學習曲線

過擬合(overfitting):模型只能擬合訓練數據的狀態。即過度訓練。 避免過擬合的幾種方法: ①增加全部訓練數據的數量(最為有效的方式) ②使用簡單的模型(簡單的模型學不夠,復雜的模型學的太多&am…

Python:函數(一)

python函數相關的知識點 1. 函數定義與調用 定義:使用 def 關鍵字,后接函數名和參數列表。 def greet(name):"""打印問候語(文檔字符串)"""print(f"Hello, {name}!") 調用&#xff1a…

關于Flutter中兩種Widget的生命周期詳解

目錄 一、StatelessWidget 生命周期 二、StatefulWidget 生命周期 1. 創建階段 2. State初始化階段 3. 構建階段 4. 更新階段 5. 銷毀階段 三、核心對比與常見陷阱 四、面試回答技巧 以下是Flutter中兩種核心Widget(StatelessWidget和StatefulWidget)生命周…

Linux 》》Ubuntu 18 LTS 之后的版本 修改IP地址 主機名

進入目錄 /etc/netplan 修改 50-cloud-init.yaml 》保存文件后,執行以下命令應用更改: sudo netplan apply 》》 DHCP模式 修改主機名 hostnamectl set-hostname xxxx 修改cloud.cfg 防止重啟主機名還原 但測試下來 不修改, 重啟 也不會還…

C++基礎 [三] - 面向對象三

初始化列表 首先,初始化列表是我們的祖師爺本賈尼博士為了解決在某些成員變量在定義時必須初始化的情況。這個初始化列表其實發生在構造函數之前,也就是實例化整個對象時先對所有的成員都進行了初始化 初始化的概念區分 在之前的博客學習中&#xff…

55年免費用!RevoUninstaller Pro專業版限時領取

今天,我要給大家介紹一款超給力的卸載工具——RevoUninstaller Pro。這是一款由保加利亞團隊精心打造的專業級卸載軟件,堪稱軟件卸載界的“神器”。 RevoUninstaller分為免費版和專業版。專業版功能更為強大,但通常需要付費才能解鎖全部功能。…

目前人工智能的發展,判斷10年、20年后的人工智能發展的主要方向,或者帶動的主要產業

根據2025年的最新行業研究和技術演進趨勢,結合歷史發展軌跡,未來10-20年人工智能發展的主要方向及帶動的產業將呈現以下六大核心趨勢: 一、算力革命與底層架構優化 核心地位:算力將成為類似“新能源電池”的基礎設施,…

【機器人】復現 ASGrasp 通用透明物體重建、6-DoF抓取預測

在機器人抓取領域,透明和鏡面物體的抓取一直是個難題。 ASGrasp核心是兩層學習型立體網絡,能夠同時恢復透明和鏡面物體的可見部分和不可見部分的深度信息。 然后融合兩層深度信息,進行重建物體,得到點云信息作為GSNet&#xff0…

2. qt寫帶有槽的登錄界面(c++)

我們在1.Qt寫簡單的登錄界面(c)_c qt 設計一個簡單界面-CSDN博客中寫了個簡單的登錄界面&#xff0c;但沒有槽&#xff0c;在這里寫一個帶有槽的界面。 1.代碼 代碼目錄如下&#xff1a; main.cpp的代碼如下&#xff1a; #include "MainWindow.h" #include <Qt…

windows安裝兩個或多個JDK,并實現自由切換

我用兩個JDK來做演示&#xff0c;分別是JDK8和JDK17(本人已安裝JDK8&#xff0c;所以這里只演示JDK17的安裝)。 1、下載JDK17安裝 Java Downloads | Oracle 2、安裝JDK17,這里忽略。直接雙擊軟件&#xff0c;點擊下一步就可以。 3、配置環境變量 在系統變量中新建一個CLASSP…

【2025最新】深度學習框架PyTorch——從入門到精通(1)下載與安裝

又名&#xff1a;蕪湖起飛俠的PyTorch學習記錄——從起飛到墜毀 簡介安裝內容總覽安裝AnacondaAnaconda簡介Anaconda下載配置環境變量驗證其他配置安裝matplotlib 安裝 CUDA安裝之前安裝cuDNN 安裝torchCPU 版本安裝GPU 版本安裝通過pip安裝&#xff08;不推薦&#xff09;通過…

C++數據結構1——棧結構詳解

一、棧的基本概念與特性 1. 棧的定義與特點 棧&#xff08;Stack&#xff09;是一種遵循后進先出&#xff08;LIFO, Last In First Out&#xff09;原則的線性數據結構&#xff0c;其核心特征包括&#xff1a; 單端操作&#xff1a;所有操作僅通過棧頂進行 動態存儲&#xf…

【Python 數據結構 15.哈希表】

目錄 一、哈希表的基本概念 1.哈希表的概念 2.鍵值對的概念 3.哈希函數的概念 4.哈希沖突的概念 5.常用的哈希函數 Ⅰ、直接定址法 Ⅱ、平方取中法 Ⅲ、折疊法 Ⅳ、除留余數法 Ⅴ、位與法 6.哈希沖突的解決方案 Ⅰ、開放定址法 Ⅱ、鏈地址法 7.哈希表的初始化 8.哈希表的元素插…

歷年云南大學計算機復試上機真題

歷年云南大學計算機復試機試真題 在線評測&#xff1a;傳送門&#xff1a;pgcode.cn 喝飲料 題目描述 商店里有 n 中飲料&#xff0c;第 i 種飲料有 mi 毫升&#xff0c;價格為 wi。 小明現在手里有 x 元&#xff0c;他想吃盡量多的飲料&#xff0c;于是向你尋求幫助&#x…

[文獻閱讀] 可變形卷積DCN - Deformable Convolutional Networks

**文獻信息&#xff1a;**Deformable Convolutional Networks arxiv.org/abs/1703.06211 發表于ICCV 2017&#xff0c;提出了可變形卷積DCN&#xff08;Deformable ConvNets&#xff09; 摘要 卷積神經網絡&#xff08;CNN&#xff09;由于其構建模塊固定的幾何結構天然地局限…

德語A1學習

Hast du morgen Zeit? Wann spielen wir? Vocabulary etwas/jemanden brauchen braucht, brauchte, hat gebraucht to need something/somebody Das geht. That works./Thats OK. den ganzen Tag the entire day dieser, diese, dieses this erst just; only G…

路局的上道檢修過程中,利用AI視覺技術對軌道兩旁設備設施進行檢修

在鐵路局的上道檢修過程中,利用AI視覺技術對軌道兩旁設備設施(如信號設備、電纜、接觸網、通信設備等)以及鐵路上方的電線(如接觸網、電力線)進行異常檢測,可以顯著提高檢修效率、降低人工成本并增強安全性。以下是具體的應用方案和技術路徑: 1. 應用場景 1.1 軌道兩旁…

函數指針/逗號表達式/不用if語句完成的字母輸出題

1.函數指針用的不是那么頻繁的一個操作&#xff1a; 下面是代碼演示&#xff1a; 在這個int (*jump)(int);中 jump是這個指針變量名稱&#xff0c;第一個int是指針類型&#xff0c;第二個int是指的這個指針所指的函數參數是int類型的。 #include <stdio.h>// 定義一個…

uniapp報毒

uniapp打包的apk&#xff0c;裝機量多了就開始報毒&#xff0c;嘗試了多種解決辦法都無解&#xff01;&#xff01; 去某寶&#xff0c;解決一次50-100不等&#xff0c;并且沒有售后&#xff0c;掉了重新做包&#xff0c;很是無解&#xff0c;包月價格更是離譜。 為此自行測試…