在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

智能感知與物聯(lián)網(wǎng)技術(shù)研究所 ? 來源:通信信號處理研究所 ? 2019-11-20 15:23 ? 次閱讀

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

Python 的最大優(yōu)勢之一就是它有各種各樣的模塊和軟件包可供選擇。這些模塊和包將 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ù)變得更加簡潔。

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

Counter

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

Counter 是 dictionary 對象的子類。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 對象,我們也要像對待其他對象類一樣,先將它分配給一個(gè)變量,而傳遞給 Counter 對象的惟一變量即是迭代器。

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

如果我們使用簡單的 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 對象中最有用的函數(shù)是 most_common()。當(dāng)它應(yīng)用于一個(gè) Counter 對象時(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ù)值。對于「獲取 list 中前 3 常見的元素及其計(jì)數(shù)」這樣的問題,這會(huì)是一種快速且簡單的方法。

如果要了解更多關(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 對象時(shí)作為參數(shù)輸入的數(shù)據(jù)類型自動(dòng)設(shè)置的。下面的代碼就是一個(gè)例子。

相反,它會(huì)使用默認(rèn)值初始化這個(gè)鍵。默認(rèn)值是根據(jù)在創(chuàng)建 defaultdict 對象時(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 對象的默認(rèn)值是 int。然后每個(gè)鍵得到了一個(gè)值,也就是「Bob」和「Katie」各獲得了一個(gè)數(shù)字。但是在最后一行,我們試著訪問了一個(gè)尚未定義的鍵,即「Sara」。

在普通 dictionary 中,這種操作會(huì)報(bào)錯(cuò)。但是使用 defaultdict 時(shí),將自動(dòng)為「Sara」初始化一個(gè)新鍵,其值 0 對應(yīng)于我們的 int 數(shù)據(jù)類型。因此,最后一行可以把這「Bob」、「Katie」和「Sara」以及對應(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)的原則。簡單來說,就是添加到 queue 中的第一個(gè)對象也必須是要第一個(gè)刪除。我們只能在 queue 前面插入內(nèi)容,也只能從后面刪除內(nèi)容——無法對中間內(nèi)容進(jìn)行操作。

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

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

fromcollectionsimportdeque

my_queue=deque(maxlen=10)

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

print(my_queue)

在上面的代碼中,我們首先初始化 deque,指定它的最大長度為 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 對象也有通用名稱。要使用 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 的使用更簡單、更可讀且更有組織性。

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

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

    關(guān)注

    66

    文章

    8428

    瀏覽量

    132840
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4801

    瀏覽量

    84863

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    labview數(shù)據(jù)類型的取值范圍是多少

    LabVIEW的數(shù)據(jù)類型豐富多樣,涵蓋了整數(shù)、小數(shù)(浮點(diǎn)數(shù))、復(fù)數(shù)等多種類型,每種類型都有其特定的取值范圍。以下是對LabVIEW中常見數(shù)據(jù)類型取值范圍的說明: 整數(shù)
    的頭像 發(fā)表于 09-04 17:33 ?1239次閱讀

    labview字符串的四種表示各有什么特點(diǎn)

    。在LabVIEW中,字符串是一基本的數(shù)據(jù)類型,用于表示文本信息。字符串在LabVIEW中有多種表示方式,每種方式都有其特定的應(yīng)用場景和特點(diǎn)。以下是對LabVIEW中四種字符串表示方式的分析: 1.
    的頭像 發(fā)表于 09-04 15:40 ?640次閱讀

    雙軸測徑儀的四種樣式!

    閉合。用于外徑、橢圓度或?qū)挾群穸鹊臋z測。 這四種樣式的測徑儀使用用途僅前兩和后兩的區(qū)別,看產(chǎn)線上是否有生產(chǎn)板材、扁線等需要測量寬度與厚度的產(chǎn)品。 需要注意的是,以上四種樣式是雙軸測
    發(fā)表于 08-27 17:42

    濾波電路的四種類型是什么

    濾波電路是電子電路中非常重要的一部分,它主要用于對信號進(jìn)行頻率選擇,即允許特定頻率范圍內(nèi)的信號通過,而阻止其他頻率的信號。濾波電路根據(jù)其特性可以分為四種基本類型:低通濾波器(Low-Pass
    的頭像 發(fā)表于 08-08 16:25 ?3261次閱讀

    負(fù)反饋的四種類型是什么

    負(fù)反饋是電子系統(tǒng)中常用的一技術(shù),它通過將系統(tǒng)輸出的一部分信號以某種方式反饋到輸入端,以減小輸出信號與期望信號之間的差異,從而提高系統(tǒng)的穩(wěn)定性和性能。負(fù)反饋主要分為四種類型:電壓串聯(lián)負(fù)反饋、電壓并聯(lián)負(fù)反饋、電流串聯(lián)負(fù)反饋和電流并聯(lián)負(fù)反饋。
    的頭像 發(fā)表于 08-08 16:15 ?4696次閱讀

    負(fù)反饋的四種類型及判斷方法

    負(fù)反饋,又稱為負(fù)反饋調(diào)節(jié),是指在一個(gè)系統(tǒng)中,當(dāng)系統(tǒng)輸出的某些變化對輸入產(chǎn)生抑制作用時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)節(jié)以維持穩(wěn)定狀態(tài)的現(xiàn)象。負(fù)反饋在生物、工程、經(jīng)濟(jì)等多個(gè)領(lǐng)域都有廣泛的應(yīng)用。本文將介紹負(fù)反饋的四種類型
    的頭像 發(fā)表于 08-02 11:01 ?2840次閱讀

    pytorch和python的關(guān)系是什么

    在當(dāng)今的人工智能領(lǐng)域,Python已經(jīng)成為了最受歡迎的編程語言之一。Python的易學(xué)易用、豐富的庫和框架以及強(qiáng)大的社區(qū)支持,使其成為了數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域的首選語言。而
    的頭像 發(fā)表于 08-01 15:27 ?2124次閱讀

    受控源四種類型及表示方法

    受控源是電子電路中的一特殊元件,它具有一個(gè)或多個(gè)控制量,其輸出電壓或電流與控制量之間存在一定的函數(shù)關(guān)系。受控源有四種基本類型:電壓控制電壓源(VCVS)、電流控制電壓源(CCVS)、電壓控制電流源
    的頭像 發(fā)表于 07-29 15:15 ?6402次閱讀

    簡述四種基本觸發(fā)器及其功能

    在數(shù)字電路設(shè)計(jì)中,觸發(fā)器是一基本且重要的存儲(chǔ)元件,用于存儲(chǔ)二進(jìn)制信息(即0和1)。根據(jù)功能和應(yīng)用場景的不同,觸發(fā)器可以分為多種類型,其中四種基本觸發(fā)器包括RS觸發(fā)器、JK觸發(fā)器、D觸發(fā)器和T觸發(fā)器。以下是對這
    的頭像 發(fā)表于 07-27 14:59 ?1.1w次閱讀

    技術(shù)干貨驛站 ▏深入理解C語言:基本數(shù)據(jù)類型和變量

    在C語言中,數(shù)據(jù)類型和變量是編程的基礎(chǔ),也是理解更復(fù)雜概念的關(guān)鍵。數(shù)據(jù)類型決定了變量的內(nèi)存分配、存儲(chǔ)范圍和操作方式,而變量則是存儲(chǔ)數(shù)據(jù)的容器。本篇文章將從基本數(shù)據(jù)類型和變量兩個(gè)方面,帶
    的頭像 發(fā)表于 07-26 17:53 ?2234次閱讀
    技術(shù)干貨驛站 ▏深入理解C語言:基本<b class='flag-5'>數(shù)據(jù)類型</b>和變量

    介紹MCUboot支持的四種升級模式(2)

    介紹MCUboot支持的四種升級模式,分別是Overwrite、Swap、Direct XIP和加載到RAM中執(zhí)行。由于FSP不支持第四種——加載到RAM中執(zhí)行,因?yàn)槲覀冎攸c(diǎn)介紹前三
    的頭像 發(fā)表于 06-13 10:56 ?997次閱讀
    介紹MCUboot支持的<b class='flag-5'>四種</b>升級模式(2)

    鴻蒙TypeScript開發(fā)入門學(xué)習(xí)第3天:【TS基礎(chǔ)類型

    任意值是 TypeScript 針對編程時(shí)類型不明確的變量使用的一種數(shù)據(jù)類型,它常用于以下三情況。
    的頭像 發(fā)表于 03-28 15:02 ?564次閱讀
    鴻蒙TypeScript開發(fā)入門學(xué)習(xí)第3天:【TS基礎(chǔ)<b class='flag-5'>類型</b>】

    C語言數(shù)據(jù)類型有哪些

    在 C 語言中,數(shù)據(jù)類型指的是用于聲明不同類型的變量或函數(shù)的一個(gè)廣泛的系統(tǒng)。變量的類型決定了變量存儲(chǔ)占用的空間,以及如何解釋存儲(chǔ)的位模式。
    發(fā)表于 03-20 10:56 ?499次閱讀
    C語言<b class='flag-5'>數(shù)據(jù)類型</b>有哪些

    如何理解IGBT的四種SOA?

    如何理解IGBT的四種SOA? IGBT的四種SOA表示了IGBT器件在不同工作狀態(tài)下的安全操作區(qū)域。這四種SOA是:Continuous SOA、Limited SOA、Pulse SOA
    的頭像 發(fā)表于 02-18 11:04 ?1158次閱讀

    四種編程語言之間的區(qū)別和聯(lián)系

    編程語言是一人與計(jì)算機(jī)之間進(jìn)行交流的方式,不同的編程語言有著不同的特點(diǎn)和用途。本文將對四種常見的編程語言——Python、Java、C++和JavaScript進(jìn)行比較,分析它們的區(qū)別和聯(lián)系。 一
    的頭像 發(fā)表于 02-05 14:16 ?1655次閱讀
    主站蜘蛛池模板: 黄色污网站在线观看| 国产精品主播在线观看| 天堂日本| 特别黄的免费视频大片| 色色免费| 毛片网站在线| 国产高清一区二区三区| 在线色综合| 免费又爽又黄的禁片1000部 | 亚洲国产成人久久| 午夜啪视频| 日鲁夜鲁鲁狠狠综合视频| 免费人成网址在线观看国内| 狠狠se| 在线国产播放| 狼人久草| 欧美交片| 黄色三级国产| 国产色婷婷| 免费看特级淫片日本| 美女张开腿让男人桶爽| 爱婷婷网站在线观看| 天天干夜夜添| 欲色啪| 最新激情网| 日本不卡高清免费v日本| 国内精品一级毛片免费看| 午夜亚洲国产| 婷婷草| 波多野结衣一级特黄毛片| 天堂8在线天堂资源在线| 亚洲三级电影| 99久久99久久久精品齐齐鬼色| 一本到卡二卡三卡四卡| 种子搜索在线| 欧美一级欧美一级高清| 国产免费卡1卡2卡| 欧美日操| 乱码一区二区三区完整视频| 日韩三级视频在线观看| 成人a大片高清在线观看|