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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python collections模塊最受歡迎的四種數據類型

智能感知與物聯網技術研究所 ? 來源:通信信號處理研究所 ? 2019-11-20 15:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在這篇文章中,機器學習工程師 George Seif 介紹了 Python collections 模塊最受歡迎的四種數據類型以及它們各自的使用方法。這些數據類型可以對代碼進行優化,進而實現更簡潔的任務執行。

Python 的最大優勢之一就是它有各種各樣的模塊和軟件包可供選擇。這些模塊和包將 Python 的功能擴展到了許多流行領域,包括機器學習、數據科學、Web 開發和前端等。其中表現最好的一個就是 Python 內置的 collections 模塊了。

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

本文作者 George Seif(機器學習工程師)。

Counter

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

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

首先,我們需要從 collections 包中導入 Counter:

fromcollectionsimportCounter

如果要創建一個 Counter 對象,我們也要像對待其他對象類一樣,先將它分配給一個變量,而傳遞給 Counter 對象的惟一變量即是迭代器。

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

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

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

你可以用這些鍵值訪問任何 Counter 項。這與從標準的 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() 函數

目前來說,Counter 對象中最有用的函數是 most_common()。當它應用于一個 Counter 對象時,會返回一個 list,這個 list 包含了前 N 個常見的元素及其計數,它們按照常見度降序排列。

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

上述代碼會打印出以下 tuples 的 list。

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

每個 tuple 的首個元素是 list 中的唯一項,第二個元素是計數值。對于「獲取 list 中前 3 常見的元素及其計數」這樣的問題,這會是一種快速且簡單的方法。

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

defaultdict

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

defaultdict 的工作方式和平常的 python dictionary 完全相同,只是當你試圖訪問一個不存在的鍵時,它不會報錯,而是會使用默認值初始化這個鍵。默認值是根據在創建 defaultdict 對象時作為參數輸入的數據類型自動設置的。下面的代碼就是一個例子。

相反,它會使用默認值初始化這個鍵。默認值是根據在創建 defaultdict 對象時作為參數輸入的數據類型自動設置的。下面的代碼就是一個例子。

fromcollectionsimportdefaultdict

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

在上面的示例中,傳遞給 defaultdict 對象的默認值是 int。然后每個鍵得到了一個值,也就是「Bob」和「Katie」各獲得了一個數字。但是在最后一行,我們試著訪問了一個尚未定義的鍵,即「Sara」。

在普通 dictionary 中,這種操作會報錯。但是使用 defaultdict 時,將自動為「Sara」初始化一個新鍵,其值 0 對應于我們的 int 數據類型。因此,最后一行可以把這「Bob」、「Katie」和「Sara」以及對應的值都打印出來。

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

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

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

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

deque

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

queue 是計算機科學中的一種基礎數據架構,它遵循先進先出(First-In-First-Out,FIFO)的原則。簡單來說,就是添加到 queue 中的第一個對象也必須是要第一個刪除。我們只能在 queue 前面插入內容,也只能從后面刪除內容——無法對中間內容進行操作。

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

再來看一個例子。我們先創建了一個 deque 對象,然后用從 1 到 10 的整數初始化它。

fromcollectionsimportdeque

my_queue=deque(maxlen=10)

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

print(my_queue)

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

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

因為我們的 queue 被設置成 maxlen=10,而 loop 值添加了 10 個元素,所以這個 queue 包含了從 1 到 10 的所有數字。現在我們來看一下如果繼續向里面添加數字會發生什么。

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

print(my_queue)

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

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

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

namedtuple

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

當你使用 python 創建一個常規 tuple 時,其元素都是通用的,而且沒有被命名。這使得你必須記住每個 tuple 元素的精確索引。namedtuple 就可以解決這個問題。

namedtuple() 可以返回一個 tuple,該 tuple 中的每個位置都有固定名稱,而且 namedtuple 對象也有通用名稱。要使用 namedtuple,需要先為其創建一個模板。下面的代碼創建了一個名為「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)

上述代碼很容易理解,我們為 namedtuple 初始化了一個「Person」模板,并初始化了其所有的屬性。上述代碼最后的打印結果是:

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

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8500

    瀏覽量

    134424
  • python
    +關注

    關注

    56

    文章

    4826

    瀏覽量

    86557

原文標題:四種高性能數據類型,Python collections助你優化代碼、簡潔任務

文章出處:【微信號:tyutcsplab,微信公眾號:智能感知與物聯網技術研究所】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    最受歡迎的單板計算機 x 最流行的移動操作系統

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

    labview數據類型與PLC 數據類型之間的轉換(來自于寫入浮點數到匯川 PLC中的數據轉換關鍵的修改)

    為32位無符號整型U32 2、將U32拆分為兩個U16,分高低位寫入PLC 3、在PLC中,將低位寄存器設置為浮點數數據類型 4、結果:PLC中一直無法正確轉換。 原因及解決方法: 1、labview
    發表于 02-24 19:01

    labview數據類型的取值范圍是多少

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

    labview字符串的四種表示各有什么特點

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

    常見的遙感數據類型有哪些

    遙感技術是一通過遙感器在遠離目標的位置獲取目標地物的電磁波信息,并進行分析的技術。遙感數據類型繁多,涵蓋了從可見光到紅外、微波等多個波段,以及不同的數據格式和分辨率。 光學遙感數據
    的頭像 發表于 09-04 14:30 ?3628次閱讀

    雙軸測徑儀的四種樣式!

    閉合。用于外徑、橢圓度或寬度厚度的檢測。 這四種樣式的測徑儀使用用途僅前兩和后兩的區別,看產線上是否有生產板材、扁線等需要測量寬度與厚度的產品。 需要注意的是,以上四種樣式是雙軸測
    發表于 08-27 17:42

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

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

    負反饋的四種類型是什么

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

    負反饋的四種類型及判斷方法

    負反饋,又稱為負反饋調節,是指在一個系統中,當系統輸出的某些變化對輸入產生抑制作用時,系統會自動調節以維持穩定狀態的現象。負反饋在生物、工程、經濟等多個領域都有廣泛的應用。本文將介紹負反饋的四種類型
    的頭像 發表于 08-02 11:01 ?4906次閱讀

    pytorch和python的關系是什么

    在當今的人工智能領域,Python已經成為了最受歡迎的編程語言之一。Python的易學易用、豐富的庫和框架以及強大的社區支持,使其成為了數據科學、機器學習和深度學習等領域的首選語言。而
    的頭像 發表于 08-01 15:27 ?3231次閱讀

    三態邏輯電路的工作原理及其四種三態緩沖器介紹

    三態邏輯作為一種數字電子技術中的邏輯類型,允許信號線在三狀態之間切換。本文介紹了三態邏輯電路原理并介紹了四種基本類型的三態緩沖器。如果你對
    的頭像 發表于 08-01 09:59 ?4154次閱讀
    三態邏輯電路的工作原理及其<b class='flag-5'>四種</b>三態緩沖器介紹

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

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

    簡述四種基本觸發器及其功能

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

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

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

    功率放大電路的四種類型

    功率放大電路是電子技術中的一個重要組成部分,廣泛應用于音頻、視頻、通信、雷達等領域。根據其工作原理和應用場景,功率放大電路可以分為四種基本類型:A類、B類、AB類和D類。 1. A類功率放大電路 A
    的頭像 發表于 07-16 09:29 ?4073次閱讀
    主站蜘蛛池模板: 成人午夜免费视频毛片 | 免费色视频在线观看 | 特黄黄三级视频在线观看 | 日本三级黄在线观看 | 亚洲小说区图片区另类春色 | www色在线| 国产午夜精品不卡片 | 亚洲精品国产美女在线观看 | 男人都懂得网址 | 欧美三级欧美一级 | 国产不卡毛片 | h视频在线观看网站 | 国产亚洲精品激情都市 | 日韩a一级欧美一级 | 五月激情综合丁香色婷婷 | 天堂中文在线免费观看 | 久久香蕉国产视频 | 狠狠躁夜夜躁人人躁婷婷视频 | 欧美一级三级在线观看 | 49pao强力免费打造在线高清 | 色先锋av资源中文字幕 | 天天色综 | 福利视频999 | 99久久婷婷国产综合精品电影 | se97se成人亚洲网站 | 国产精品第九页 | 一级视频在线免费观看 | 欧美色吧视频在线观看 | xxxxxx日本人免费 | 香蕉久久夜色精品国产小说 | 性xxxx奶大欧美高清 | 狠狠干免费视频 | 天天射夜夜骑 | jk黑色丝袜美腿老师啪啪 | 最好看免费中文字幕2018视频 | 日本高清免费一本视频在线观看 | 四虎在线永久免费视频网站 | 三级毛片网 | 亚洲www美色 | 视频在线高清完整免费观看 | 色综合久久综合欧美综合图片 |