自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python編程:集合工具類(lèi)之計(jì)數(shù)器(Counter)詳解與實(shí)踐

開(kāi)發(fā) 開(kāi)發(fā)工具
本篇文章主要介紹了Python內(nèi)置集合模塊的工具類(lèi)Counter的使用,并結(jié)合代碼和描述,以期深入淺出的幫助你更好的理解和掌握Counter相關(guān)內(nèi)容和應(yīng)用。

前言

本文繼續(xù)來(lái)盤(pán)Python內(nèi)置集合模塊,這期主要介紹其中的工具類(lèi)計(jì)數(shù)器類(lèi)(Counter)類(lèi)的使用。我們還是采用“短平快”的模式——文字+代碼,助你多快好省的學(xué)會(huì)它,并能都收用上它。閑話少敘,開(kāi)始正文——

 Counter

Counter是一個(gè)dict子類(lèi),用于計(jì)數(shù)可哈希對(duì)象。它是一個(gè)集合,其中元素被存儲(chǔ)為字典鍵,它們的計(jì)數(shù)值被存儲(chǔ)為字典值。計(jì)數(shù)值可為任何整數(shù)值,包括零或負(fù)計(jì)數(shù)。Counter類(lèi)類(lèi)似于其他語(yǔ)言中的包或多集。

計(jì)數(shù)的元素來(lái)自可迭代對(duì)象或另一個(gè)初始化的映射(或計(jì)數(shù)器)。下面是Python中創(chuàng)建Counter對(duì)象的一些方式。請(qǐng)看示例代碼:

from collections import Counter

# 創(chuàng)建一個(gè)空的Counter對(duì)象
c1 = Counter()
print(c1)

# 從可迭代對(duì)象創(chuàng)建新的Counter對(duì)象
c2 = Counter('aabbbcddeeee')
print(c2)

# 從映射創(chuàng)建新的的Counter對(duì)象
c3 = Counter({'orange': 6, 'red': 3, 'green': 5})
print(c3)

# 從關(guān)鍵字參數(shù)創(chuàng)建Counter對(duì)象
c4 = Counter(cats=4, dogs=8)
print(c4)

程序運(yùn)行結(jié)果如下所示:

Counter()
Counter({'e': 4, 'b': 3, 'a': 2, 'd': 2, 'c': 1})
Counter({'orange': 6, 'green': 5, 'red': 3})
Counter({'dogs': 8, 'cats': 4})

Counter對(duì)象有一個(gè)字典接口,只是它們會(huì)為丟失的項(xiàng)返回一個(gè)零計(jì)數(shù),而不是引發(fā)KeyError,示例如下:

# 存在元素計(jì)算
c5 = Counter(['eggs', 'ham', 'jar ', 'ham'])
print(c5['ham'])

# 缺失元素計(jì)數(shù)為0
print(c5['bacon'])

輸出結(jié)果如下:

2
0

從Counter中刪除元素

要從Counter中刪除元素,可以使用del關(guān)鍵字。請(qǐng)記住,將計(jì)數(shù)設(shè)置為零并不會(huì)從計(jì)數(shù)器中刪除一個(gè)元素。請(qǐng)看示例代碼:

# –從Counter對(duì)象刪除元素 – #
# 0計(jì)數(shù)的counter條目項(xiàng)
c5['sausage'] = 0
print(c5)

# del 實(shí)際刪除條目項(xiàng)
del c5['sausage']
print(c5)

輸出結(jié)果為:

Counter({'ham': 2, 'eggs': 1, 'jar ': 1, 'sausage': 0})
Counter({'ham': 2, 'eggs': 1, 'jar ': 1})

如代碼所示,我們將0設(shè)置為計(jì)數(shù)器中不存在的項(xiàng)。Python將該項(xiàng)以零值添加到Counter中。在第7行中,我們使用del關(guān)鍵字完全刪除該項(xiàng)。很明顯,計(jì)數(shù)為0,并不會(huì)刪除Counter中的計(jì)數(shù)項(xiàng),而要?jiǎng)h除之,得用del命令才行。

Counter方法

Counter對(duì)象除了支持所有字典可用的方法之外,以下是其特有最常見(jiàn)方法:返回一個(gè)迭

1)elements():

返回迭代器,其為重復(fù)相應(yīng)元素次數(shù)與其計(jì)數(shù)值相等的迭代器。按第一次遇到的順序返回元素。如果一個(gè)元素的計(jì)數(shù)小于1,elements()將忽略它。示例如下:

# – Counter 對(duì)象方法 – #
# elements()
counter = Counter(a=1, b=2, c=0, d=-2, e=4)
sorted_elements = sorted(counter.elements())
print(sorted_elements)

輸出結(jié)果為:

['a', 'b', 'b', 'e', 'e', 'e', 'e']

2)most_common([n]):

返回n個(gè)最常見(jiàn)元素的列表,元素的計(jì)數(shù)大小從最大到最小。如果省略n或None, most_common()將返回計(jì)數(shù)器中的所有元素。計(jì)數(shù)相等的元素按第一次遇到的順序排列:

# 2)most_common()
most_common_3 = Counter('abracadabrae').most_common(3)
print(most_common_3)

輸出結(jié)果為:

[('a', 5), ('b', 2), ('r', 2)]

3)subtract([iterable-or-mapping]):

從可迭代對(duì)象或另一個(gè)映射(或計(jì)數(shù)器)中減去元素。像dict.update(),但是減去計(jì)數(shù)而不是替換它們。輸入和輸出都可能是零或負(fù)的。示例如下:

# 3)subtract()
c_1 = Counter(a=4, b=2, c=0, d=-2)
c_2 = Counter(a=1, b=2, c=3, d=4)
c_1.subtract(c_2)
print(c_1)

輸出結(jié)果如下:

[('a', 5), ('b', 2), ('r', 2)]

4)兩個(gè)方法

通常的字典方法可用于Counter對(duì)象,但有兩個(gè)方法針對(duì)計(jì)數(shù)器的工作方式不同:

fromkeys(iterable):

這個(gè)類(lèi)方法Counter對(duì)象沒(méi)實(shí)現(xiàn)。

update([iterable-or-mapping]):

從可迭代對(duì)象中計(jì)數(shù)元素,或從另一個(gè)映射(或計(jì)數(shù)器)中添加元素。類(lèi)似dict.update(),但Counter是增加計(jì)數(shù)而不是替換它們。而且,迭代對(duì)象應(yīng)該是元素序列,而不是(鍵,值)對(duì)的序列。示例如下:

# 4)update()
d = Counter(a=3, b=1)
d.update({'a': 5, 'c': 4})
print(d)
d.update('aBac')
print(d)
d.update(dict([('a',10),('e',9)]))
print(d)
#但不要這樣:
d.update([('a',10),('e',9)])
print(d)

請(qǐng)注意下面的輸出結(jié)果:

Counter({'a': 8, 'c': 4, 'b': 1})

Counter({'a': 10, 'c': 5, 'b': 1, 'B': 1})

Counter({'a': 20, 'e': 9, 'c': 5, 'b': 1, 'B': 1})

Counter({'a': 20, 'e': 9, 'c': 5, 'b': 1, 'B': 1, ('a', 10): 1, ('e', 9): 1})

1.1.1 數(shù)學(xué)式操作

Counter提供了幾種數(shù)學(xué)操作來(lái)組合Counter對(duì)象運(yùn)算,以生成多集(計(jì)數(shù)大于零的計(jì)數(shù)器)。加減法通過(guò)加減相應(yīng)元素的計(jì)數(shù)來(lái)合并計(jì)數(shù)器。交集和并集返回對(duì)應(yīng)計(jì)數(shù)的最小值和最大值。每個(gè)操作都可以接受帶符號(hào)計(jì)數(shù)值的輸入,但輸出將排除計(jì)數(shù)為零或更少的結(jié)果。

c = Counter(a=3, b=1)
d = Counter(a=1, b=2)
print(c + d)
print(c - d)
print(c & d)
print(c | d )

輸出結(jié)果類(lèi)似如下:

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

一元加減法是與空計(jì)數(shù)器相加或與空計(jì)數(shù)器相減的快捷方式。示例如下:

#一元加減
c = Counter(a=2, b=-4)
print(+c)# 一元加
print(-c)# 一元減

輸出結(jié)果如下:

Counter({'a': 2})
Counter({'b': 4})

簡(jiǎn)而言之,可利用Counter對(duì)象實(shí)現(xiàn)一些相關(guān)數(shù)據(jù)的統(tǒng)計(jì)分析。

本文小結(jié)

本篇文章主要介紹了Python內(nèi)置集合模塊的工具類(lèi)Counter的使用,并結(jié)合代碼和描述,以期深入淺出的幫助你更好的理解和掌握Counter相關(guān)內(nèi)容和應(yīng)用。若是初學(xué)者,記得一定要?jiǎng)邮謱?shí)踐一把才是最佳學(xué)習(xí)模式。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2024-02-07 12:32:00

重構(gòu)技巧PythonCounter

2023-08-08 08:01:22

微服務(wù)架構(gòu)服務(wù)

2009-11-06 16:59:26

WCF性能計(jì)數(shù)器

2023-07-28 08:15:27

PC程序計(jì)數(shù)器

2025-02-10 07:40:00

Java集合工具類(lèi)編程

2022-11-01 09:56:52

Python集合工具類(lèi)

2024-03-26 07:30:07

Java虛擬機(jī)源文件

2009-10-29 11:47:15

ADO.NET計(jì)數(shù)器b

2010-02-22 16:34:17

WCF性能計(jì)數(shù)器

2009-12-22 13:16:53

WCF性能計(jì)數(shù)器

2022-04-08 07:22:15

分布式計(jì)數(shù)器系統(tǒng)設(shè)計(jì)

2009-12-22 13:25:58

WCF性能計(jì)數(shù)器內(nèi)存

2009-06-11 16:27:18

科學(xué)型Java計(jì)數(shù)器

2009-11-25 15:07:39

PHP添加計(jì)數(shù)器

2023-01-09 08:42:04

String數(shù)據(jù)類(lèi)型

2010-01-04 16:02:32

ADO.NET計(jì)數(shù)器

2009-12-01 15:01:07

PHP生成訪問(wèn)計(jì)數(shù)器

2010-01-18 11:03:17

VB.NET網(wǎng)頁(yè)計(jì)數(shù)器

2022-08-29 19:51:58

CSS計(jì)數(shù)器

2015-03-24 13:46:29

C++多線程計(jì)數(shù)器特性實(shí)現(xiàn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)