<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
collections 是 Python 的一個內建模組,所謂內建模組的意思是指 Python 內部封裝好的模組,無需安裝即可直接使用。
Python 提供了很多非常好用的基本型別,比如不可變型別 tuple,我們可以輕鬆地用它來表示一個二元向量。
namedtuple 是一個函數,它用來建立一個自定義的 tuple 物件,並且規定了 tuple 元素的個數,並可以用屬性而不是索引來參照 tuple 的某個元素。
如此一來,我們用 namedtuple 可以很方便地定義一種資料型別,它具備 tuple 的不變性,又可以根據屬性來參照,使用十分方便。
本範例中我們使用了一個三維座標 x,y,z 來定義一個 tuple 物件,物件元素有3個,然後通過座標值來參照相應的值即可。
from collections import namedtuple from collections import deque from collections import defaultdict from collections import OrderedDict from collections import Counter def testNamedTuple(): vector=namedtuple('vector',['x','y','z']) flag=vector(3,4,5) print(type(flag)) print(isinstance(flag,vector)) print(isinstance(flag,tuple)) #通過這裡的判定我們就可以知曉它是元組型別 print(flag.x,flag.y,flag.z)
deque是棧和佇列的一種廣義實現,deque是 "double-end queue" 的簡稱。
deque支援執行緒安全、有效記憶體地以近似O(1)的效能在 deque 的兩端插入和刪除元素,儘管 list 也支援相似的操作,但是它主要在固定長度操作上的優化,從而在 pop(0) 和 insert(0,v)(會改變資料的位置和大小)上有O(n)的時間複雜度。
在資料結構中,我們知道佇列和堆疊是兩個非常重要的資料型別,一個先進先出,一個後進先出。
在 python 中,使用 list 儲存資料時,按索引存取元素很快,但是插入和刪除元素就很慢,因為 list 是線性儲存,資料量大的時候,插入和刪除效率很低。
deque是為了高效實現插入和刪除操作的雙向連結串列結構,非常適合實現佇列和堆疊這樣的資料結構。
def testDeque(): list1=[x*x for x in range(101)] delist=deque(list1) #對列表進行了一次再處理,讓list1列表變成了雙向連結串列結構 delist.append(1000)#將x新增到deque的右側 delist.appendleft(2000)#將x新增到deque的左側 delist.pop(1000)#移除和返回deque中最右側的元素,如果沒有元素,將會報出IndexError; delist.popleft()#移除和返回deque中最左側的元素,如果沒有元素,將會報出IndexError; delist.count(1)#返回deque中元素等於1的個數 delist.remove(10000)#移除第一次出現的value,如果沒有找到,報出ValueError; delist.reverse()#反轉deque中的元素,並返回None; list2=[1,3,4,5] delist.extend(list2)#將可迭代變數iterable中的元素新增至deque的右側 delist.extendleft(list2)#將變數iterable中的元素新增至deque的左側,往左側新增序列的順序與可迭代變數iterable中的元素相反 delist.maxlen()#唯讀的屬性,deque的最大長度,如果無解,就返回None delist.rotate(1)#從右側反轉n步,如果n為負數,則從左側反轉 delist.clear()#將deque中的元素全部刪除,最後長度為0;
defaultdict是內建資料型別 dict 的一個子類,基本功能與 dict 一樣,只是重寫了一個方法__missing__(key)和增加了一個可寫的物件變數 default_factory。
使用 dict 字典型別時,如果參照的 key 不存在,就會丟擲 KeyError。如果希望 Key 不存在時,返回一個預設值,就可以用 defaultdict。
def testDefaultdict(): dict1= defaultdict(lambda: 'default') #Key不存在時,返回一個預設值,就可以用default,defaultdict的其他行為跟dict是完全一樣的 dict1["k1"]="v1" print(dict1["k2"]) list2= [('yellow',11),('blue',2),('yellow',3),('blue',4),('red',5),('red',10)] dict1 = defaultdict(list)#使用list作為default_factory,很容易將一個key-value的序列轉換為一個關於list的詞典 for k,v in list2: dict1[k].append(v) print(dict1)
OrderedDict類似於正常的詞典,只是它記住了元素插入的順序,當在有序的詞典上迭代時,返回的元素就是它們第一次新增的順序。這樣 dict 就是一個有序的字典。
使用 dict 時,key 是無序的。在對 dict 做迭代時,我們無法確定 key 的順序。但是如果想要保持 key 的順序,可以用 OrderedDict。
def testOrderedDict(): dict1=dict([('aaa', 111), ('ddd',444),('bbb', 222), ('ccc', 333)]) print(dict1) dict2 = OrderedDict([('ddd',444),('aaa', 111), ('bbb', 222), ('ccc', 333)])#OrderedDict的key會按照插入的順序排列,不是key本身排序 print(dict2) dict3 = {"banana": 33, "apple": 222, "pear": 1, "orange": 4444} # dict sorted by key dict4=OrderedDict(sorted(dict3.items(), key=lambda t: t[0])) print("dict4",dict4) # dict sorted by value dict5=OrderedDict(sorted(dict3.items(), key=lambda t: t[1])) print("dict5",dict5) # dict sorted by length of key string dict6 = OrderedDict(sorted(dict3.items(), key=lambda t: len(t[0]))) print("dict6",dict6) print(dict6['apple'])
def testCounter(): '''counter可以支援方便、快速的計數''' str1="abcdefgabcedergeghdjlkabcdefe" #將可迭代的字串初始化counter str2=Counter(str1) print(str2) #從輸出的內容來看,Counter實際上也是dict的一個子類 for k,v in str2.items(): print(k,v) dict3 = {"banana": 33, "apple": 222, "pear": 1, "orange": 4444,"apples":2}#將dict初始化counter dict4=Counter(dict3) print(dict4) print(dict4["test"])#Counter物件類似於字典,如果某個項缺失,會返回0,而不是報出KeyError; dict5=Counter(high=9,age=33,money=-1)#將args初始化counter print(dict5) #elements返回一個迭代器,每個元素重複的次數為它的數目,順序是任意的順序,如果一個元素的數目少於1,那麼elements()就會忽略它; list1=list(dict5.elements()) print(list1) #most_common返回一個列表,包含counter中n個最大數目的元素 #,如果忽略n或者為None,most_common()將會返回counter中的所有元素,元素有著相同數目的將會以任意順序排列; str1 = "abcdefgabcedergeghdjlkabcdefe" list1=Counter(str1).most_common(3) print(list1) if __name__ == '__main__': # testNamedTuple() # testCounter() testDefaultdict() # testDeque() # testOrderedDict()
到此這篇關於Python內建模組Collections的使用教學詳解的文章就介紹到這了,更多相關Python Collections內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45