成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

新聞 機器學習
在這篇文章中,機器學習工程師 George Seif 介紹了 Python collections 模塊最受歡迎的四種數據類型以及它們各自的使用方法。

 在這篇文章中,機器學習工程師 George Seif 介紹了 Python collections 模塊非常受歡迎的四種數據類型以及它們各自的使用方法。這些數據類型可以對代碼進行優化,進而實現更簡潔的任務執行。
Python 的最大優勢之一就是它有各種各樣的模塊和軟件包可供選擇。這些模塊和包將 Python 的功能擴展到了許多流行領域,包括機器學習、數據科學、Web 開發和前端等。其中表現最好的一個就是 Python 內置的 collections 模塊了。

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

[[281234]]

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

Counter

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

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

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

  1. from collections import Counter  

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

  1. lst = [123321112231211
  2.  
  3. counter = Counter(lst) 

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

  1. Counter({172533}) 

你可以用這些鍵值訪問任何 Counter 項。這與從標準的 Python dictionary 中獲取元素的方法完全相同。

  1. lst = [123321112231211
  2.  
  3. counter = Counter(lst) 
  4.  
  5. print(counter[1]) 
  6.  
  7. most_common() 函數 

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

  1. lst = [123321112231211
  2.  
  3. counter = Counter(lst) 
  4.  
  5. print(counter.most_common(2)) 

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

  1. [(17), (25)] 

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

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

defaultdict

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

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

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

  1. from collections import defaultdict 
  2.  
  3. names_dict = defaultdict(int
  4.  
  5. names_dict["Bob"] = 1 
  6.  
  7. names_dict["Katie"] = 2 
  8.  
  9. sara_number = names_dict["Sara"
  10.  
  11. print(names_dict) 

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

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

  1. defaultdict(<class 'int'>, {'Bob'1'Katie'2'Sara'0}) 

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

  1. defaultdict(<class 'int'>, {'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 的整數初始化它。

  1. from collections import deque 
  2.  
  3. my_queue = deque(maxlen=10
  4.  
  5. for i in range(10): 
  6.  
  7.     my_queue.append(i+1
  8.  
  9. print(my_queue) 

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

  1. deque([12345678910], maxlen=10

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

  1. for i in range(1015): 
  2.  
  3.     my_queue.append(i+1
  4.  
  5. print(my_queue) 

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

  1. deque([6789101112131415], 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」。

  1. from collections import namedtuple 
  2.  
  3. Person = namedtuple('Person''name age job'
  4.  
  5. Once the template is created, you can use it to create namedtuple objects. Let’s create 2 namedtuple’s for 2 Persons and print out their representation. 
  6.  
  7. Person = namedtuple('Person''name age job'
  8.  
  9. Mike = Person(name='Mike', age=30, job='Data Scientist'
  10.  
  11. Kate = Person(name="Kate", age=28, job='Project Manager'
  12.  
  13. print(Mike) 
  14.  
  15. print(Kate) 

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

  1. Person(name='Mike', age=30, job='Data Scientist'
  2.  
  3. Person(name='Kate', age=28, job='Project Manager'

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

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

 

 

責任編輯:張燕妮 來源: 機器之心
相關推薦

2019-11-04 14:08:08

Python工具Windows

2010-01-12 17:21:31

百兆交換機

2021-10-24 08:37:18

網絡監控網絡架構網絡

2022-08-01 07:56:23

React Hook開發組件

2021-11-08 09:33:07

JS 字符串數據類型

2018-09-13 14:51:43

NoSQL數據庫大數據

2025-01-27 11:49:55

2017-08-01 23:44:25

數據分析數據科學數據

2020-05-19 20:13:04

物聯網計算類型IOT

2022-03-25 14:47:24

Javascript數據類型開發

2009-08-20 09:52:31

C#參數類型

2021-12-01 23:05:27

物聯網計算數據

2017-07-27 14:01:51

大數據數據分析類型模式

2013-06-28 10:17:04

2022-06-27 11:09:06

邊緣計算

2022-10-09 18:16:01

Flowable設置ReceiveTas

2009-07-08 18:20:21

JDBC驅動

2009-09-08 17:20:01

C#排序算法

2010-07-28 13:54:42

Flex數據綁定

2009-02-25 09:52:14

類型轉換.NET 強制轉型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产91久久久久久不卞 | 久久久久久久久久久91 | 久久天堂 | 中文字幕精品一区久久久久 | 日韩福利 | 国产欧美一区二区三区日本久久久 | 91影库| 久久精品国产免费高清 | 在线观看国产视频 | 日韩免费视频 | 亚洲高清在线 | 欧美日韩亚洲二区 | 精品国产一二三区 | 91视频亚洲 | 欧美精品一区三区 | 中文字幕国产第一页 | 日韩日b视频| 午夜影院操 | 亚洲国产精品福利 | 正在播放国产精品 | 日韩中文字幕网 | 欧美极品在线 | 福利社午夜影院 | 亚洲视频中文字幕 | 精品不卡 | 成人影 | 久久性色| 欧美极品少妇xxxxⅹ免费视频 | 久热中文字幕 | 成人在线视频免费观看 | 国产精品久久亚洲 | 黄色免费在线观看网址 | 作爱视频免费观看 | 欧美一级黄色免费看 | 亚洲成人一区二区 | 欧美在线色视频 | 99综合| 人人亚洲 | 中文字幕一区二区三区精彩视频 | 中文天堂在线一区 | 久久蜜桃av一区二区天堂 |