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

聊聊Python的一個(gè)內(nèi)置模塊Collections

開發(fā) 后端
collections 是 Python 的一個(gè)內(nèi)置模塊,所謂內(nèi)置模塊的意思是指 Python 內(nèi)部封裝好的模塊,無需安裝即可直接使用。

1、模塊說明

collections 是 Python 的一個(gè)內(nèi)置模塊,所謂內(nèi)置模塊的意思是指 Python 內(nèi)部封裝好的模塊,無需安裝即可直接使用。

  • collections 包含了一些特殊的容器,針對(duì) Python 內(nèi)置的容器,例如:list、dict、set、tuple,提供了另一種選擇。
  • namedtuple:可以創(chuàng)建包含名稱的 tuple。
  • deque:類似于 list 的容器,可以快速的在隊(duì)列頭部和尾部添加、刪除元素。
  • OrderedDict:dict的子類,可以記住元素的添加順序。
  • defaultdict:dict的子類,可以調(diào)用提供默認(rèn)值的函數(shù)。
  • Counter:dict的子類,計(jì)算可hash的對(duì)象。

2、 實(shí)戰(zhàn)代碼

(1) testNamedTuple函數(shù)

Python 提供了很多非常好用的基本類型,比如不可變類型 tuple,我們可以輕松地用它來表示一個(gè)二元向量。

namedtuple 是一個(gè)函數(shù),它用來創(chuàng)建一個(gè)自定義的 tuple 對(duì)象,并且規(guī)定了 tuple 元素的個(gè)數(shù),并可以用屬性而不是索引來引用 tuple 的某個(gè)元素。

如此一來,我們用 namedtuple 可以很方便地定義一種數(shù)據(jù)類型,它具備 tuple 的不變性,又可以根據(jù)屬性來引用,使用十分方便。

本示例中我們使用了一個(gè)三維坐標(biāo) x,y,z 來定義一個(gè) tuple 對(duì)象,對(duì)象元素有3個(gè),然后通過坐標(biāo)值來引用相應(yīng)的值即可。

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)

(2) testDeque函數(shù)

deque是棧和隊(duì)列的一種廣義實(shí)現(xiàn),deque是 "double-end queue" 的簡(jiǎn)稱。

deque支持線程安全、有效內(nèi)存地以近似O(1)的性能在 deque 的兩端插入和刪除元素,盡管 list 也支持相似的操作,但是它主要在固定長(zhǎng)度操作上的優(yōu)化,從而在 pop(0) 和 insert(0,v)(會(huì)改變數(shù)據(jù)的位置和大小)上有O(n)的時(shí)間復(fù)雜度。

在數(shù)據(jù)結(jié)構(gòu)中,我們知道隊(duì)列和堆棧是兩個(gè)非常重要的數(shù)據(jù)類型,一個(gè)先進(jìn)先出,一個(gè)后進(jìn)先出。

在 python 中,使用 list 存儲(chǔ)數(shù)據(jù)時(shí),按索引訪問元素很快,但是插入和刪除元素就很慢,因?yàn)?list 是線性存儲(chǔ),數(shù)據(jù)量大的時(shí)候,插入和刪除效率很低。

deque是為了高效實(shí)現(xiàn)插入和刪除操作的雙向鏈表結(jié)構(gòu),非常適合實(shí)現(xiàn)隊(duì)列和堆棧這樣的數(shù)據(jù)結(jié)構(gòu)。

def testDeque():
list1=[x*x for x in range(101)]
delist=deque(list1) #對(duì)列表進(jìn)行了一次再處理,讓list1列表變成了雙向鏈表結(jié)構(gòu)
delist.append(1000)#將x添加到deque的右側(cè)
delist.appendleft(2000)#將x添加到deque的左側(cè)
delist.pop(1000)#移除和返回deque中最右側(cè)的元素,如果沒有元素,將會(huì)報(bào)出IndexError;
delist.popleft()#移除和返回deque中最左側(cè)的元素,如果沒有元素,將會(huì)報(bào)出IndexError;
delist.count(1)#返回deque中元素等于1的個(gè)數(shù)
delist.remove(10000)#移除第一次出現(xiàn)的value,如果沒有找到,報(bào)出ValueError;
delist.reverse()#反轉(zhuǎn)deque中的元素,并返回None;
list2=[1,3,4,5]
delist.extend(list2)#將可迭代變量iterable中的元素添加至deque的右側(cè)
delist.extendleft(list2)#將變量iterable中的元素添加至deque的左側(cè),往左側(cè)添加序列的順序與可迭代變量iterable中的元素相反
delist.maxlen()#只讀的屬性,deque的最大長(zhǎng)度,如果無解,就返回None
delist.rotate(1)#從右側(cè)反轉(zhuǎn)n步,如果n為負(fù)數(shù),則從左側(cè)反轉(zhuǎn)
delist.clear()#將deque中的元素全部刪除,最后長(zhǎng)度為0;

(3)testDefaultdict函數(shù)

defaultdict是內(nèi)置數(shù)據(jù)類型 dict 的一個(gè)子類,基本功能與 dict 一樣,只是重寫了一個(gè)方法__missing__(key)和增加了一個(gè)可寫的對(duì)象變量 default_factory。

使用 dict 字典類型時(shí),如果引用的 key 不存在,就會(huì)拋出 KeyError。如果希望 Key 不存在時(shí),返回一個(gè)默認(rèn)值,就可以用 defaultdict。

def testDefaultdict():
dict1= defaultdict(lambda: 'default') #Key不存在時(shí),返回一個(gè)默認(rèn)值,就可以用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,很容易將一個(gè)key-value的序列轉(zhuǎn)換為一個(gè)關(guān)于list的詞典
for k,v in list2:
dict1[k].append(v)
print(dict1)

(4) testOrderedDict函數(shù)

OrderedDict類似于正常的詞典,只是它記住了元素插入的順序,當(dāng)在有序的詞典上迭代時(shí),返回的元素就是它們第一次添加的順序。這樣 dict 就是一個(gè)有序的字典。

使用 dict 時(shí),key 是無序的。在對(duì) dict 做迭代時(shí),我們無法確定 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會(huì)按照插入的順序排列,不是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'])

(5) testCounter函數(shù)

def testCounter():
'''counter可以支持方便、快速的計(jì)數(shù)'''
str1="abcdefgabcedergeghdjlkabcdefe" #將可迭代的字符串初始化counter
str2=Counter(str1)
print(str2) #從輸出的內(nèi)容來看,Counter實(shí)際上也是dict的一個(gè)子類
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對(duì)象類似于字典,如果某個(gè)項(xiàng)缺失,會(huì)返回0,而不是報(bào)出KeyError;
dict5=Counter(high=9,age=33,money=-1)#將args初始化counter
print(dict5)
#elements返回一個(gè)迭代器,每個(gè)元素重復(fù)的次數(shù)為它的數(shù)目,順序是任意的順序,如果一個(gè)元素的數(shù)目少于1,那么elements()就會(huì)忽略它;
list1=list(dict5.elements())
print(list1)
#most_common返回一個(gè)列表,包含counter中n個(gè)最大數(shù)目的元素
#,如果忽略n或者為None,most_common()將會(huì)返回counter中的所有元素,元素有著相同數(shù)目的將會(huì)以任意順序排列;
str1 = "abcdefgabcedergeghdjlkabcdefe"
list1=Counter(str1).most_common(3)
print(list1)
if __name__ == '__main__':
# testNamedTuple()
# testCounter()
testDefaultdict()
# testDeque()
# testOrderedDict()
責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2020-11-11 08:24:06

collection

2021-08-27 09:48:18

Pythonitertools代碼

2021-07-29 10:46:56

Python內(nèi)置庫代碼

2021-11-05 07:59:25

HashMapJava知識(shí)總結(jié)

2025-06-06 10:00:00

內(nèi)置模塊python開發(fā)

2022-09-14 16:10:29

Python

2022-06-10 13:03:44

接口重試while

2022-11-08 08:35:53

架構(gòu)微服務(wù)移動(dòng)

2022-10-30 21:11:10

ManimPython動(dòng)畫

2023-01-02 18:15:42

PythonC++模塊

2019-10-29 05:47:15

CC++Python

2020-08-29 19:15:09

python數(shù)據(jù)庫SQLite

2019-05-14 12:30:07

PythonPygame游戲框架

2024-08-02 09:49:35

Spring流程Tomcat

2024-06-17 11:59:39

2022-06-07 07:21:19

Python內(nèi)置庫命令行

2023-09-26 16:44:14

光模塊

2022-03-06 19:57:50

狀態(tài)機(jī)easyfsm項(xiàng)目

2024-07-15 08:25:07

2022-06-27 08:00:49

hook工具庫函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 99精品国产一区二区青青牛奶 | 97综合在线| 国产精品国产 | 在线视频日韩 | av在线免费看网址 | a久久| 全部免费毛片在线播放网站 | 亚洲电影一区二区三区 | 91精品久久久久 | 在线高清免费观看视频 | 超碰在线97国产 | www.国产| 精品久久一区 | 久久久久久成人 | 国产一区二区在线视频 | 国产精品一区二区在线 | 91视频网 | 国产精品高清一区二区三区 | 亚洲国产精品一区二区第一页 | 精品视频一区二区三区在线观看 | 中文无码日韩欧 | 999久久久免费精品国产 | 亚洲精品免费观看 | 综合网视频 | 国产小视频在线 | 日韩手机视频 | 国产成人精品一区二区三区网站观看 | 成人av免费 | 女人牲交视频一级毛片 | 欧美韩一区二区三区 | www.中文字幕.com | 国产在线视频一区二区董小宛性色 | 中文字幕av在线 | 亚洲h视频| 岛国av在线免费观看 | 欧美二三区 | 激情久久av一区av二区av三区 | 一级欧美一级日韩片免费观看 | 免费成人高清在线视频 | 又黄又爽的网站 | 三级欧美 |