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

聊聊Python的一個內置模塊Collections

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

1、模塊說明

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

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

2、 實戰代碼

(1) testNamedTuple函數

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)

(2) testDeque函數

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;

(3)testDefaultdict函數

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)

(4) testOrderedDict函數

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'])

(5) testCounter函數

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()
責任編輯:姜華 來源: 今日頭條
相關推薦

2020-11-11 08:24:06

collection

2021-08-27 09:48:18

Pythonitertools代碼

2021-07-29 10:46:56

Python內置庫代碼

2021-11-05 07:59:25

HashMapJava知識總結

2025-06-06 10:00:00

內置模塊python開發

2022-09-14 16:10:29

Python

2022-06-10 13:03:44

接口重試while

2022-11-08 08:35:53

架構微服務移動

2022-10-30 21:11:10

ManimPython動畫

2023-01-02 18:15:42

PythonC++模塊

2019-10-29 05:47:15

CC++Python

2020-08-29 19:15:09

python數據庫SQLite

2024-08-02 09:49:35

Spring流程Tomcat

2024-06-17 11:59:39

2019-05-14 12:30:07

PythonPygame游戲框架

2022-03-06 19:57:50

狀態機easyfsm項目

2022-06-27 08:00:49

hook工具庫函數

2022-10-28 07:27:17

Netty異步Future

2023-09-26 16:44:14

光模塊

2024-07-15 08:25:07

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级免费观看 | 成人免费视频 | 成人性视频免费网站 | 99久久99热这里只有精品 | 99re国产视频 | 亚洲精品第一国产综合野 | 国产a级毛片| 免费播放一级片 | 国产乱码精品一区二区三区忘忧草 | 国产一区二区三区在线免费 | 久久精品视频播放 | 天堂视频中文在线 | 久久精品国产一区二区 | 18gay男同69亚洲网站 | 亚洲天堂精品久久 | 亚洲综合99 | 午夜影院普通用户体验区 | 九九天堂网| 性色av网站 | 久久av一区| 91成人在线视频 | 少妇午夜一级艳片欧美精品 | 黄色片亚洲 | h片在线免费观看 | 日韩成人在线看 | 精品国产乱码久久久久久闺蜜 | 三级高清 | 成人精品国产免费网站 | 免费成人在线网站 | 国产成人精品一区二区三区在线 | 国产精品免费在线 | 久久久入口| 久在线观看| 欧美一区二 | 91传媒在线观看 | 国产精品视频www | 欧美日韩一二三区 | 亚洲国产精品视频 | 中文字幕一区二区三区在线观看 | 欧美在线视频一区 | 欧美一区视频 |