91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python collections模塊最受歡迎的四種數(shù)據(jù)類型

智能感知與物聯(lián)網(wǎng)技術(shù)研究所 ? 來源:通信信號(hào)處理研究所 ? 2019-11-20 15:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在這篇文章中,機(jī)器學(xué)習(xí)工程師 George Seif 介紹了 Python collections 模塊最受歡迎的四種數(shù)據(jù)類型以及它們各自的使用方法。這些數(shù)據(jù)類型可以對(duì)代碼進(jìn)行優(yōu)化,進(jìn)而實(shí)現(xiàn)更簡(jiǎn)潔的任務(wù)執(zhí)行。

Python 的最大優(yōu)勢(shì)之一就是它有各種各樣的模塊和軟件包可供選擇。這些模塊和包將 Python 的功能擴(kuò)展到了許多流行領(lǐng)域,包括機(jī)器學(xué)習(xí)、數(shù)據(jù)科學(xué)、Web 開發(fā)和前端等。其中表現(xiàn)最好的一個(gè)就是 Python 內(nèi)置的 collections 模塊了。

一般而言,Python 中的 collections 模塊是用于存儲(chǔ)列表、字典、元組以及集等數(shù)據(jù)集合的容器。這些容器嵌入在 Python 中,可以實(shí)現(xiàn)開箱即用。collections 模塊提供了額外的高性能數(shù)據(jù)類型,它們可以優(yōu)化代碼,讓一些任務(wù)變得更加簡(jiǎn)潔。

本文作者 George Seif(機(jī)器學(xué)習(xí)工程師)。

Counter

官方文檔:https://docs.python.org/2/library/collections.html#collections.Counter

Counter 是 dictionary 對(duì)象的子類。collections 模塊中的 Counter() 函數(shù)會(huì)接收一個(gè)諸如 list 或 tuple 的迭代器,然后返回一個(gè) Counter dictionary。這個(gè) dictionary 的鍵是該迭代器中的唯一元素,每個(gè)鍵的值是迭代器元素的計(jì)數(shù)。

首先,我們需要從 collections 包中導(dǎo)入 Counter:

fromcollectionsimportCounter

如果要?jiǎng)?chuàng)建一個(gè) Counter 對(duì)象,我們也要像對(duì)待其他對(duì)象類一樣,先將它分配給一個(gè)變量,而傳遞給 Counter 對(duì)象的惟一變量即是迭代器。

lst=[1,2,3,3,2,1,1,1,2,2,3,1,2,1,1]
counter=Counter(lst)

如果我們使用簡(jiǎn)單的 print 函數(shù)(print(counter))把這個(gè) Counter 打印出來,則會(huì)得到一些與 dictionary 稍微類似的輸出:

Counter({1:7,2:5,3:3})

你可以用這些鍵值訪問任何 Counter 項(xiàng)。這與從標(biāo)準(zhǔn)的 Python dictionary 中獲取元素的方法完全相同。

lst=[1,2,3,3,2,1,1,1,2,2,3,1,2,1,1]
counter=Counter(lst)
print(counter[1])

most_common() 函數(shù)

目前來說,Counter 對(duì)象中最有用的函數(shù)是 most_common()。當(dāng)它應(yīng)用于一個(gè) Counter 對(duì)象時(shí),會(huì)返回一個(gè) list,這個(gè) list 包含了前 N 個(gè)常見的元素及其計(jì)數(shù),它們按照常見度降序排列。

lst=[1,2,3,3,2,1,1,1,2,2,3,1,2,1,1]
counter=Counter(lst)
print(counter.most_common(2))

上述代碼會(huì)打印出以下 tuples 的 list。

[(1,7),(2,5)]

每個(gè) tuple 的首個(gè)元素是 list 中的唯一項(xiàng),第二個(gè)元素是計(jì)數(shù)值。對(duì)于「獲取 list 中前 3 常見的元素及其計(jì)數(shù)」這樣的問題,這會(huì)是一種快速且簡(jiǎn)單的方法。

如果要了解更多關(guān)于 Counter 的功能,可以查看官方文檔。

defaultdict

官方文檔:https://docs.python.org/2/library/collections.html#collections.defaultdict

defaultdict 的工作方式和平常的 python dictionary 完全相同,只是當(dāng)你試圖訪問一個(gè)不存在的鍵時(shí),它不會(huì)報(bào)錯(cuò),而是會(huì)使用默認(rèn)值初始化這個(gè)鍵。默認(rèn)值是根據(jù)在創(chuàng)建 defaultdict 對(duì)象時(shí)作為參數(shù)輸入的數(shù)據(jù)類型自動(dòng)設(shè)置的。下面的代碼就是一個(gè)例子。

相反,它會(huì)使用默認(rèn)值初始化這個(gè)鍵。默認(rèn)值是根據(jù)在創(chuàng)建 defaultdict 對(duì)象時(shí)作為參數(shù)輸入的數(shù)據(jù)類型自動(dòng)設(shè)置的。下面的代碼就是一個(gè)例子。

fromcollectionsimportdefaultdict

names_dict=defaultdict(int)
names_dict["Bob"]=1
names_dict["Katie"]=2
sara_number=names_dict["Sara"]
print(names_dict)

在上面的示例中,傳遞給 defaultdict 對(duì)象的默認(rèn)值是 int。然后每個(gè)鍵得到了一個(gè)值,也就是「Bob」和「Katie」各獲得了一個(gè)數(shù)字。但是在最后一行,我們?cè)囍L問了一個(gè)尚未定義的鍵,即「Sara」。

在普通 dictionary 中,這種操作會(huì)報(bào)錯(cuò)。但是使用 defaultdict 時(shí),將自動(dòng)為「Sara」初始化一個(gè)新鍵,其值 0 對(duì)應(yīng)于我們的 int 數(shù)據(jù)類型。因此,最后一行可以把這「Bob」、「Katie」和「Sara」以及對(duì)應(yīng)的值都打印出來。

defaultdict(,{'Bob':1,'Katie':2,'Sara':0})

如果我們改用 list 來初始化我們的 defaultdict,也就是 names_dict = defaultdict(list),那么「Sara」的值將被初始化成一個(gè)空列表 [],打印來的內(nèi)容就變成了:

defaultdict(,{'Bob':1,'Katie':2,'Sara':[]})

如果要了解更多關(guān)于 defaultdict 的功能,可以查看官方文檔。

deque

官方文檔:https://docs.python.org/2/library/collections.html#collections.deque

queue 是計(jì)算機(jī)科學(xué)中的一種基礎(chǔ)數(shù)據(jù)架構(gòu),它遵循先進(jìn)先出(First-In-First-Out,F(xiàn)IFO)的原則。簡(jiǎn)單來說,就是添加到 queue 中的第一個(gè)對(duì)象也必須是要第一個(gè)刪除。我們只能在 queue 前面插入內(nèi)容,也只能從后面刪除內(nèi)容——無法對(duì)中間內(nèi)容進(jìn)行操作。

collections 庫(kù)中的 deque 對(duì)該功能進(jìn)行了優(yōu)化。這個(gè)方法的一個(gè)關(guān)鍵特性是保持隊(duì)列長(zhǎng)度一直不變,也就是說,如果你將 queue 的最大大小設(shè)置為 10,那么 deque 將根據(jù) FIFO 原則添加和刪除元素,以保持 queue 的最大大小為 10。這是迄今為止 Python 中使用 queue 的最好方法了。

再來看一個(gè)例子。我們先創(chuàng)建了一個(gè) deque 對(duì)象,然后用從 1 到 10 的整數(shù)初始化它。

fromcollectionsimportdeque

my_queue=deque(maxlen=10)

foriinrange(10):
my_queue.append(i+1)

print(my_queue)

在上面的代碼中,我們首先初始化 deque,指定它的最大長(zhǎng)度為 10。然后,我們通過 for loop 將值插入到 queue 中。注意這里我們使用了與常見 Python list 相同的方式填充 queue。最后,我們把結(jié)果打印出來。

deque([1,2,3,4,5,6,7,8,9,10],maxlen=10)

因?yàn)槲覀兊?queue 被設(shè)置成 maxlen=10,而 loop 值添加了 10 個(gè)元素,所以這個(gè) queue 包含了從 1 到 10 的所有數(shù)字。現(xiàn)在我們來看一下如果繼續(xù)向里面添加數(shù)字會(huì)發(fā)生什么。

foriinrange(10,15):
my_queue.append(i+1)

print(my_queue)

在上述代碼中,我們又向 queue 中添加了 5 個(gè)元素——數(shù)字 11 到 15。但是我們的 queue 只能有 10 個(gè)元素,所以它需要?jiǎng)h除一些元素。因?yàn)?queue 必須服從 FIFO 原則,所以它刪掉了前五個(gè)插入到 queue 中的元素,按照插入順序就是 [1, 2, 3, 4, 5]。打印的結(jié)果如下:

deque([6,7,8,9,10,11,12,13,14,15],maxlen=10)

如果要了解更多關(guān)于 deque 的功能,可以查看官方文檔。

namedtuple

官方文檔:https://docs.python.org/2/library/collections.html#collections.namedtuple

當(dāng)你使用 python 創(chuàng)建一個(gè)常規(guī) tuple 時(shí),其元素都是通用的,而且沒有被命名。這使得你必須記住每個(gè) tuple 元素的精確索引。namedtuple 就可以解決這個(gè)問題。

namedtuple() 可以返回一個(gè) tuple,該 tuple 中的每個(gè)位置都有固定名稱,而且 namedtuple 對(duì)象也有通用名稱。要使用 namedtuple,需要先為其創(chuàng)建一個(gè)模板。下面的代碼創(chuàng)建了一個(gè)名為「Person」的 namedtuple 模板,其屬性為「name」、「age」和「job」。

fromcollectionsimportnamedtuple

Person=namedtuple('Person','nameagejob')
Oncethetemplateiscreated,youcanuseittocreatenamedtupleobjects.Let’screate2namedtuple’sfor2Personsandprintouttheirrepresentation.
Person=namedtuple('Person','nameagejob')

Mike=Person(name='Mike',age=30,job='DataScientist')
Kate=Person(name="Kate",age=28,job='ProjectManager')

print(Mike)
print(Kate)

上述代碼很容易理解,我們?yōu)?namedtuple 初始化了一個(gè)「Person」模板,并初始化了其所有的屬性。上述代碼最后的打印結(jié)果是:

Person(name='Mike',age=30,job='DataScientist')
Person(name='Kate',age=28,job='ProjectManager')

因此,namedtuple 讓 tuple 的使用更簡(jiǎn)單、更可讀且更有組織性。

如果要了解更多關(guān)于 namedtuple 的功能,可以查看官方文檔。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8555

    瀏覽量

    136999
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4877

    瀏覽量

    90099

原文標(biāo)題:四種高性能數(shù)據(jù)類型,Python collections助你優(yōu)化代碼、簡(jiǎn)潔任務(wù)

文章出處:【微信號(hào):tyutcsplab,微信公眾號(hào):智能感知與物聯(lián)網(wǎng)技術(shù)研究所】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于凌羽派的OpenHarmony北向應(yīng)用開發(fā):ArkTS語(yǔ)法-數(shù)據(jù)類型和變量聲明

    可以在程序執(zhí)行期間具有不同的值。使用TS風(fēng)格,聲明的時(shí)候使用冒號(hào)給出數(shù)據(jù)類型。 let hi: string = \'hello\'; let num: number = 0; 2.2 常量聲明
    發(fā)表于 02-26 14:24

    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十五):數(shù)據(jù)類型詳解

    前言 本篇對(duì)IO-Link規(guī)范的附錄F的數(shù)據(jù)類型做個(gè)詳細(xì)解釋,附錄定義了 ?基本數(shù)據(jù)類型 (Basic Data Types) 和? 組合數(shù)據(jù)類型 (Composite Data Types),并
    的頭像 發(fā)表于 01-14 18:25 ?5449次閱讀
    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十五):<b class='flag-5'>數(shù)據(jù)類型</b>詳解

    2025年北匯信息在電子發(fā)燒友的十大最受歡迎文章

    的廣泛關(guān)注,故整理了最受歡迎的十大文章,看看大家最關(guān)心的是哪些內(nèi)容。 2026年,歡迎大家多多交流和反饋,有什么感興趣的的汽車電子測(cè)試相關(guān)的內(nèi)容,我們會(huì)努力原創(chuàng),更多
    的頭像 發(fā)表于 12-29 14:39 ?324次閱讀
    2025年北匯信息在電子發(fā)燒友的十大<b class='flag-5'>最受歡迎</b>文章

    最受歡迎的大數(shù)據(jù)可視化工具

    : ?能夠處理不同種類型的傳入數(shù)據(jù) ?能夠應(yīng)用不同種類的過濾器來調(diào)整結(jié)果 ?能夠在分析過程中與數(shù)據(jù)集進(jìn)行交互 ?能夠連接到其他軟件來接收輸入數(shù)據(jù),或?yàn)槠渌浖峁┹斎?/div>
    的頭像 發(fā)表于 12-24 17:05 ?275次閱讀
    <b class='flag-5'>最受歡迎</b>的大<b class='flag-5'>數(shù)據(jù)</b>可視化工具

    C語(yǔ)言自動(dòng)類型轉(zhuǎn)換

    一、自動(dòng)類型轉(zhuǎn)換 數(shù)據(jù)類型存在自動(dòng)轉(zhuǎn)換的情況. 自動(dòng)轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型運(yùn)算時(shí),在編譯的時(shí)候自動(dòng)完成。 char類型數(shù)據(jù)轉(zhuǎn)換為int
    發(fā)表于 11-25 08:04

    【獲獎(jiǎng)名單】2025開發(fā)板評(píng)測(cè)大賽優(yōu)秀開發(fā)者、最受歡迎開發(fā)板公布

    試用測(cè)評(píng)后通過問卷調(diào)查投票,選出了各自心目中最受歡迎的開發(fā)板?,F(xiàn)將名單一同予以公示。 大賽作品詳情:【作品精選】2025電子發(fā)燒友開發(fā)板測(cè)評(píng)大賽作品合集! 優(yōu)秀作品開發(fā)者: 專題廠商試用板子用戶
    發(fā)表于 11-21 09:31

    一圖看懂綠電直連的四種玩法

    通過 “總覽框架 + 分模式圖解” 的形式,用可視化邏輯拆解綠電直連的四種核心模式,涵蓋每種模式的核心特征、適用場(chǎng)景、參與主體三大關(guān)鍵信息,幫你快速區(qū)分不同 “玩法” 的差異與適配性。
    的頭像 發(fā)表于 10-15 10:18 ?1350次閱讀
    一圖看懂綠電直連的<b class='flag-5'>四種</b>玩法

    [投票評(píng)選]2025電子發(fā)燒友開發(fā)板測(cè)評(píng)大賽--最受歡迎開發(fā)板

    2025電子發(fā)燒友開發(fā)板測(cè)評(píng)大賽--最受歡迎開發(fā)板 大賽詳情: 電子發(fā)燒友攜手 16 家生態(tài)廠商發(fā)起開發(fā)板測(cè)評(píng)大賽,設(shè) OpenHarmony、RISC - V、Rockchip 三大賽道,共計(jì)
    發(fā)表于 10-13 16:25

    從入門到精通:基于開源代碼的BLE四種模式開發(fā)詳解

    Bluetooth Smart,是藍(lán)牙4.0及更高版本引入的低功耗無線通信技術(shù),專為低帶寬、間歇性數(shù)據(jù)傳輸?shù)奈锫?lián)網(wǎng)(IoT)和穿戴設(shè)備設(shè)計(jì)。 ? 一、Air8000藍(lán)牙大模式 Air8000藍(lán)牙支持四種模式,分別是中心設(shè)備模式
    的頭像 發(fā)表于 10-09 18:00 ?545次閱讀
    從入門到精通:基于開源代碼的BLE<b class='flag-5'>四種</b>模式開發(fā)詳解

    SQL 通用數(shù)據(jù)類型

    SQL 通用數(shù)據(jù)類型 數(shù)據(jù)庫(kù)表中的每個(gè)列都要求有名稱和數(shù)據(jù)類型。Each column in a database table is required to have a name and a
    的頭像 發(fā)表于 08-18 09:46 ?717次閱讀

    SC、LC、FC和ST四種類型中哪類價(jià)格最貴

    在SC、LC、FC和ST四種類型的光纖跳線中,F(xiàn)C類型的光纖跳線通常價(jià)格相對(duì)較高,具體分析如下: FC類型的光纖跳線: 特點(diǎn):采用金屬螺紋套筒連接,具有較高的穩(wěn)定性和抗拉強(qiáng)度,適用于高振動(dòng)環(huán)境或需要
    的頭像 發(fā)表于 07-25 10:16 ?1165次閱讀

    最受歡迎的單板計(jì)算機(jī) x 最流行的移動(dòng)操作系統(tǒng)

    在本文中,我們將揭秘:應(yīng)在樹莓派上使用Android的4個(gè)理由從哪里獲取樹莓派的Android系統(tǒng)?該選擇哪一個(gè)?未來展望。在樹莓派上使用Android的4個(gè)理由樹莓派無疑是世界上最受歡迎
    的頭像 發(fā)表于 06-18 17:20 ?777次閱讀
    <b class='flag-5'>最受歡迎</b>的單板計(jì)算機(jī) x 最流行的移動(dòng)操作系統(tǒng)

    RDMA簡(jiǎn)介3之四種子協(xié)議對(duì)比

    RDMA協(xié)議共有四種子協(xié)議,分別為InfiniBand、iWARP、RoCE v1和RoCE v2協(xié)議。這四種協(xié)議使用統(tǒng)一的RDMA API,但在具體的網(wǎng)絡(luò)層級(jí)實(shí)現(xiàn)上有所不同,如圖1所示,接下來將
    發(fā)表于 06-04 16:05

    變頻器主要支持哪四種模式?有什么區(qū)別?

    變頻器作為現(xiàn)代工業(yè)自動(dòng)化領(lǐng)域中的關(guān)鍵設(shè)備,其控制模式的多樣性和靈活性對(duì)于滿足不同應(yīng)用場(chǎng)景的需求至關(guān)重要。變頻器主要支持四種控制模式:無PG的V/F模式、有PG的V/F模式、無PG的矢量控制模式以及有
    的頭像 發(fā)表于 04-16 18:22 ?2432次閱讀
    變頻器主要支持哪<b class='flag-5'>四種</b>模式?有什么區(qū)別?

    芯片封裝中的四種鍵合方式:技術(shù)演進(jìn)與產(chǎn)業(yè)應(yīng)用

    自動(dòng)鍵合和混合鍵合四種主流技術(shù),它們?cè)诠に嚵鞒獭⒓夹g(shù)特點(diǎn)和應(yīng)用場(chǎng)景上各具優(yōu)勢(shì)。本文將深入剖析這四種鍵合方式的技術(shù)原理、發(fā)展現(xiàn)狀及未來趨勢(shì),為產(chǎn)業(yè)界提供技術(shù)參考。
    的頭像 發(fā)表于 04-11 14:02 ?3183次閱讀
    芯片封裝中的<b class='flag-5'>四種</b>鍵合方式:技術(shù)演進(jìn)與產(chǎn)業(yè)應(yīng)用