搜尋
首頁後端開發Python教學Python中的Counter模組怎麼使用

Python中的Counter模組怎麼使用

Apr 19, 2023 pm 02:55 PM
pythoncounter

描述

專案 描述
#Python 解釋器 3.10. 6

Counter 模組

在 Python 的 collections 模組中,有一個很常用的模組就是 Counter。 Counter 是一個簡單的計數器,用於統計某些可哈希物件的數量。它以字典的形式儲存元素和它們的計數。

Counter() 類別

類別Counter() 能夠對傳入給該類別的參數依照某一規則進行計數,並將計數物件與計數結果作為鍵值對以字典的形式進行結果的傳回。

Counter(iterable=None, /, **kwds)

舉個栗子

from collections import Counter
# 返回一个空的 Counter 对象
cnt = Counter()
print(cnt)

# 将可迭代对象(字符串)作为参数
cnt = Counter('Hello World')
print(cnt)

# 将可迭代对象(列表)作为参数
cnt = Counter(['a', 'a', 'b', 'd', 'c', 'd'])
print(cnt)

# 使用可迭代对象(字典)作为参数
cnt = Counter({'a': 1, 'b': 2, 'd': 3, 'c': 2})
print(cnt)

# 使用关键字参数
cnt = Counter(a=1, b=2, d=3, c=2)
print(cnt)

執行效果

Counter()
Counter({' l': 3, 'o': 2, 'H': 1, 'e': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1})
Counter({'a': 2, 'd': 2, 'b': 1, 'c': 1})
Counter({'d': 3, 'b': 2, 'c': 2, 'a': 1})
Counter({'d': 3, 'b': 2, 'c': 2, 'a': 1})

##Counter () 物件

字典

Counter() 傳回的結果為一個字典,它擁有普通字典的大部分方法。在大多數情況下,你可以像操作字典一樣操作 Counter 物件。對此,請參考以下範例:

from collections import Counter
cnt = Counter('Hello World')
print(cnt)

# 输出 Counter 对象中的键值对列表
print(cnt.items())

# 移除 Counter 对象中的最后一个键值对
print(cnt.popitem())
print(cnt)

# 输出 Counter 中键 l 对应的值
print(cnt['l'])

執行結果

#Counter({'l': 3, 'o': 2, 'H' : 1, 'e': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1})

dict_items([('H', 1), ('e ', 1), ('l', 3), ('o', 2), (' ', 1), ('W', 1), ('r', 1), ('d', 1 )])
('d', 1)
Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, ' ': 1, 'W ': 1, 'r': 1})
3

有序性

Python 中的字典是無序的,

無序的 的意思並不是說字典中的鍵值對沒有順序,而是指字典中的鍵值對的順序是不可預測的。對此,請參考如下範例:

d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
    print(key)

該範例的輸出結果可能是:

a

b
c

也可能是:

b

c
a

當然還有其他可能,這裡就不一一列舉了。

Python 官方對

Python 3.6 版本中的字典進行了最佳化,使其能夠記住鍵值對插入的順序。此後,字典顯得不那麼凌亂了(字典中的鍵值對的順序變得可以預測了)。

KeyError

在 Python 的內建字典中,若嘗試存取不存在的按鍵,Python 將拋出

KeyError 例外錯誤。對此,請參考如下範例:

d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d)

# 尝试访问字典 d 中不存在的键
print(d['d'])

執行效果

Traceback (most recent call last):

  File "C:\main. py", line 5, in
    print(d['d'])
KeyError: 'd'
{'a': 1, 'b': 2, 'c' : 3}

同樣的場景。這次,我們讓 Counter 作為主角。

from collections import Counter
cnt = Counter({'a': 1, 'b': 2, 'c': 3})
print(cnt)

# 尝试访问 Counter 中不存在的键
print(cnt['d'])

執行效果

存取Counter 物件中不存在的鍵時,並不會拋出

KeyError 異常,而是傳回預設計數值0

Counter({'c': 3, 'b': 2, 'a': 1})

0

魔術方法__missing__

#__missing__() 是Python 中的一個特殊方法,用於處理透過鍵存取字典中的值時鍵不存在時的情況。
當我們使用字典的索引來存取不存在的鍵時,Python 將會呼叫特殊方法 __missing__() 來嘗試傳回一個合適的值。若未實作 __missing__() 方法,Python 將會拋出 KeyError 例外。對此,請參考如下範例:

# 创建一个字典对象,该对象继承自 Python 内置的 dict 对象
class MyDict(dict):
    def __missing__(self, key):
        return 0

# 实例化 MyDict() 对象
myDict = MyDict()
# 尝试访问 myDict 对象中不存在的键 a
print(myDict['a'])

執行效果

#0

update() 方法

Counter 物件與dict 物件同樣實作了update() 方法。使用 update() 方法能夠將作為參數的字典合併到呼叫該方法的 dict 物件中。不同的是,dict 物件的 update() 方法在遇到具有相同的鍵時,將會對該鍵對應的值執行 覆寫 操作。而 Counter 物件的 update() 方法在遇到具有相同的鍵時,將會對該鍵對應的值執行 疊加 操作。對此,請參考如下範例:

from collections import Counter
# Python 中内置的 dict 对象
d = dict([('a', 1), ('b', 2), ('c', 3)])
print(d)

d.update({'a': 4})
print(d)

print()

# Counter 对象
cnt = Counter({'a': 1, 'b': 2, 'c': 3})
print(cnt)

cnt.update({'a': 4})
print(cnt)

執行效果

#{'a': 1, 'b': 2, 'c': 3 }
{'a': 4, 'b': 2, 'c': 3}

Counter({'c': 3, 'b': 2, 'a': 1} )
Counter({'a': 5, 'c': 3, 'b': 2})

Counter 对象的常用方法

most_common()

most_common() 方法将返回一个列表,列表中的元素均为 Counter 对象中的键值对组成的元组。元组在列表中的顺序取决于计数值(键值对中的值)的大小。计数值更大的元组将位于列表的前端,计数值相等的元组将按照它们首次在列表中出现的顺序进行排列(先出现的元组将更靠近列表的前端)。
most_common() 默认将使用 Counter 对象中所有的键值对组成的元组作为返回列表中的元素。你可以通过向该方法提供一个数值,该数值将指定放回的列表中的元素的数量。

举个栗子

from collections import Counter
cnt = Counter({'a': 1, 'b': 2, 'c': 3})
print(cnt)

print()

print(cnt.most_common())
# 返回由 Counter 中计数值最大的两个
# 键值对构成的元组所组成的列表
print(cnt.most_common(2))
# 返回由 Counter 中计数值最大的
# 键值对构成的元组所组成的列表
print(cnt.most_common(1))

执行效果

Counter({'c': 3, 'b': 2, 'a': 1})

[('c', 3), ('b', 2), ('a', 1)]
[('c', 3), ('b', 2)]
[('c', 3)]

elements()

elements() 方法将返回一个以 Counter 对象中的键为元素的迭代器,其中每个元素将重复出现计数值所指定的次数。

迭代器中的元素将存在如下特点:

  • 元素将会按照其首次添加到 Counter 对象中的顺序进行返回。

  • 某个键对应的计数值小于一,那么该键将不会作为元素出现在 element() 方法返回的迭代器中。

举个栗子

from collections import Counter
cnt = Counter({'a': 1, 'b': 2, 'c': 3, 'd': -4})
print(cnt)

print()

print(list(cnt.elements()))

执行效果

Counter({'c': 3, 'b': 2, 'a': 1, 'd': -4})

['a', 'b', 'b', 'c', 'c', 'c']

total()

total() 方法将返回 Counter 对象中,所有计数值累加后得到的结果。对此,请参考如下示例:

from collections import Counter
cnt = Counter({'a': 1, 'b': 2, 'c': 3, 'd': -4})
cnt1 = Counter('Hello World')
print(cnt.total())
print(cnt1.total())

执行效果

2
11

subtract()

该方法的效果与 Counter 对象的 update() 方法类似。如果说 update() 方法执行的是 操作,那么 subtract() 方法执行的则是 操作。对此,请参考如下示例:

from collections import Counter
cnt = Counter({'a': 1, 'b': 2, 'c': 3, 'd': -4})

cnt.subtract({'a': 0, 'b': 1, 'd': -11})
print(cnt)

执行效果

Counter({'d': 7, 'c': 3, 'a': 1, 'b': 1})

Counter 对象间的运算

注:

本部分内容中讲解到的运算符仅能在 Python 3.3 及以后版本中正常使用。

加法运算

在 Python 的 Counter 模块中,两个 Counter 对象可以相加,相加后将返回一个新的 Counter 对象,其中每个元素的计数是两个原始 Counter 对象中该元素计数的总和。可以通过使用加法运算符来执行此操作。对此,请参考如下示例:

from collections import Counter

cnt = Counter('Hello')
cnt1 = Counter('World')

print(cnt)
print(cnt1)
print(cnt + cnt1)

执行效果

Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1})
Counter({'W': 1, 'o': 1, 'r': 1, 'l': 1, 'd': 1})
Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, 'W': 1, 'r': 1, 'd': 1})

注:

在 Counter 对象间的运算过程中,对于 Counter 中不存在的键,其计数值为零。

减法运算

在 Python 的 Counter 模块中,可以使用减法运算符来对两个 Counter 对象进行减法运算,即将左侧 Counter 对象中的计数器值减去右侧 Counter 对象中相同键的计数器值,最后返回一个新的 Counter 对象。对此,请参考如下示例:

from collections import Counter

cnt = Counter('cook')
cnt1 = Counter('coder')

print(cnt)
print(cnt1)
print(cnt - cnt1)

执行效果

Counter({'o': 2, 'c': 1, 'k': 1})
Counter({'c': 1, 'o': 1, 'd': 1, 'e': 1, 'r': 1})
Counter({'o': 1, 'k': 1})

注:

在 Counter 对象间的运算过程中,对于 Counter 中不存在的键,其计数值为零。

并集运算

Counter 对象之间的并集运算是指两个 Counter 对象按照键的并集进行运算,返回的结果是一个新的 Counter 对象,其中包含的键和值均为 原始 Counter 对象中存在的键及其对应的最大值。对此,请参考如下示例:

from collections import Counter

cnt = Counter('Hello')
cnt1 = Counter('World')

print(cnt)
print(cnt1)
print(cnt | cnt1)

执行效果

Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1})
Counter({'W': 1, 'o': 1, 'r': 1, 'l': 1, 'd': 1})
Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1, 'W': 1, 'r': 1, 'd': 1})

交集运算

Counter 对象之间的交集运算是指两个 Counter 对象按照键的交集进行运算,返回的结果是一个新的 Counter 对象,其中包含的键和值均为 原始 Counter 对象中共同拥有的键及其对应的最小值。对此,请参考如下示例:

from collections import Counter

cnt = Counter('Hello')
cnt1 = Counter('World')

print(cnt)
print(cnt1)
print(cnt & cnt1)

执行效果

Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1})
Counter({'W': 1, 'o': 1, 'r': 1, 'l': 1, 'd': 1})
Counter({'l': 1, 'o': 1})

单目运算

单目运算指的是表达式中存在单目运算符的运算操作。存在两种单目运算符,即单目减法运算符与单目加法运算符。无论是单目减法运算符还是单目加法运算符,它们的操作对象均为 Counter 对象中的计数值。
在对 Counter 对象进行单目运算后,将返回一个由大于零的计数值相关的键值对组成的 Counter 对象。对此,请参考如下示例:

from collections import Counter

cnt = Counter({'a': 4, 'b': 3, 'd': 0, 'c': -5})
print(+cnt)
print(-cnt)

执行效果

Counter({'a': 4, 'b': 3})
Counter({'c': 5})

Counter 对象间的比较

Python 3.10 版本开始,Counter 对象间开始支持常见的比较运算符,这些运算符有:

  • >

  • >=

  • ==

  • !=

这里以 >== 为例进行讲解。

>

> 的左侧的 Counter 对象的键对应的计数值均大于该符号右侧的 Counter 对象中相同的键(对于 Counter 中不存在的键,其计数值为零)对应的计数值时,比较结果为 True。否则为 False。对此,请参考如下示例:

from collections import Counter

cnt = Counter({'a': 4, 'b': 3, 'd': 7, 'c': 5})
cnt1 = Counter({'c': 3, 'd': 2, 'b': 6, 'a': 4})
cnt2 = Counter({'c': 4, 'd': 6, 'b': 2, 'a': 3})

print(cnt > cnt1)
print(cnt > cnt2)

执行效果

False
True

==

== 的左侧的 Counter 对象的键对应的计数值均等于该符号右侧的 Counter 对象中相同的键(对于 Counter 中不存在的键,其计数值为零)对应的计数值时,比较结果为 True。否则为 False。对此,请参考如下示例:

from collections import Counter

cnt = Counter({'a': 3, 'b': 2, 'd': 6, 'c': 4})
cnt1 = Counter({'c': 3, 'd': 2, 'b': 6, 'a': 4})
cnt2 = Counter({'c': 4, 'd': 6, 'b': 2, 'a': 3})

print(cnt == cnt1)
print(cnt == cnt2)

执行效果

False
True

以上是Python中的Counter模組怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
Python和時間:充分利用您的學習時間Python和時間:充分利用您的學習時間Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:遊戲,Guis等Python:遊戲,Guis等Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python vs.C:申請和用例Python vs.C:申請和用例Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時的Python計劃:一種現實的方法2小時的Python計劃:一種現實的方法Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:探索其主要應用程序Python:探索其主要應用程序Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

您可以在2小時內學到多少python?您可以在2小時內學到多少python?Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到?如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到?Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器