日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3 collections模块 tree_第30天: Python collections 模块

發布時間:2025/3/12 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3 collections模块 tree_第30天: Python collections 模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

by 豆豆

1.簡介

collections 是 python 的內置模塊,提供了很多方便且高性能的關于集合的操作,掌握這些知識有助于提高代碼的性能和可讀性。

2.常用功能

2.1 namedtuple 功能詳解

namedtuple() 返回一個新的元組子類,且規定了元組的元素的個數,同時除了使用下標獲取元素之外,還可以通過屬性直接獲取。

from collections import namedtuple

User = namedtuple("User",["name", "age", "weight"])

user = User("admin", "20", "60")

name, age, weight = user

print(user[0])

print(name, age, weight)

print(user.name, user.age, user.weight)

# 輸出結果如下

admin

admin 20 60

admin 20 60

由以上代碼可以看出,namedtuple() 相當于直接定義了一個新的類,但是這個類跟傳統的定義 class 的方式又有著巨大的區別。該方式會比直接定義 class 的方式省很多空間,其次其返回值是一個 tuple,支持 tuple 的各種操場。

同時,namedtuple() 還自帶兩個非常好用的方法。

# 將序列直接轉換為新的 tuple 對象

user = ["root", 32, 65]

user = User._make(user)

print(user)

# 輸出 User(name='root', age=32, weight=65)

# 返回一個 dict

user = User("admin", 20, 60)

print(user._asdict())

# 輸出 OrderedDict([('name', 'admin'), ('age', 20), ('weight', 60)])

2.2 ChainMap 功能講解

ChainMap() 可以將多個字典集合到一個字典中去,對外提供一個統一的視圖。注意:該操作并是不將所有字典做了一次拷貝,實際上是在多個字典的上層又進行了一次封裝而已。

from collections import ChainMap

user1 = {"name":"admin", "age":"20"}

user2 = {"name":"root", "weight": 65}

users = ChainMap(user1, user2)

print(users.maps)

users.maps[0]["name"] = "tiger"

print(users.maps)

for key, value in users.items():

print(key, value)

# 輸出如下

[{'name': 'admin', 'age': '20'}, {'name': 'root', 'weight': 65}]

[{'name': 'tiger', 'age': '20'}, {'name': 'root', 'weight': 65}]

name tiger

weight 65

age 20

由此可見,如果 ChainMap() 中的多個字典有重復 key,查看的時候可以看到所有的 key,但遍歷的時候卻只會遍歷 key 第一次出現的位置,其余的忽略。同時,我們可以通過返回的新的視圖來更新原來的的字典數據。進一步驗證了該操作不是做的拷貝,而是直接指向原字典。

2.3 deque 功能詳解

dqueue 是 ”double-ended queue” 的簡稱,是一種類似列表(list)的容器,實現了在兩端快速添加(append)和彈出(pop)操作。大大加快了遍歷速度

from collections import deque

q = deque([1, 2, 3])

q.append('4')

q.appendleft('0')

print(q)

print(q.popleft())

# 輸出如下

deque(['0', 1, 2, 3, '4'])

0

2.4 Counter 功能詳解

Counter 可以簡單理解為一個計數器,可以統計每個元素出現的次數,同樣 Counter() 是需要接受一個可迭代的對象的。

from collections import Counter

animals = ["cat", "dog", "cat", "bird", "horse", "tiger", "horse", "cat"]

animals_counter = Counter(animals)

print(animals_counter)

print(animals_counter.most_common(2))

Counter({'cat': 3, 'horse': 2, 'dog': 1, 'bird': 1, 'tiger': 1})

[('cat', 3), ('horse', 2)]

# 輸出如下

Counter({'cat': 3, 'horse': 2, 'dog': 1, 'bird': 1, 'tiger': 1})

[('cat', 3), ('horse', 2)]

其實一個 Counter 就是一個字典,其額外提供的 most_common() 函數通常用于求 Top k 問題。

2.5 OrderedDict 功能詳解

OrderedDict 是字典的子類,保證了元素的插入順序。在 3.7 版本下,字典同樣也保證了元素的插入順序。那相比內置字典 OrderedDict 有哪些升級呢。

算法上, OrderedDict 可以比 dict 更好地處理頻繁的重新排序操作。在跟蹤最近的訪問這種場景(例如在 LRU cache)下非常適用。

OrderedDict 類有一個 move_to_end() 方法,可以有效地將元素移動到任一端。

from collections import OrderedDict

user = OrderedDict()

user["name"] = "admin"

user["age"] = 23

user["weight"] = 65

print(user)

user.move_to_end("name") # 將元素移動至末尾

print(user)

user.move_to_end("name", last = False) # 將元素移動至開頭

print(user)

# 輸出如下

OrderedDict([('name', 'admin'), ('age', 23), ('weight', 65)])

OrderedDict([('age', 23), ('weight', 65), ('name', 'admin')])

OrderedDict([('name', 'admin'), ('age', 23), ('weight', 65)])

2.6 defaultdict 功能詳解

defaultdict 是內置 dict 類的子類。它實現了當 key 不存在是返回默認值的功能,除此之外,與內置 dict 功能完全一樣。

from collections import defaultdict

default_dict = defaultdict(int)

default_dict["x"] = 10

print(default_dict["x"])

print(default_dict["y"])

# 輸出如下

10

0

注意,defaultdict 的參數必須是可操作的。比如 python 內置類型,或者無參的可調用的函數。

def getUserInfo():

return {

"name" : "",

"age" : 0

}

default_dict = defaultdict(getUserInfo)

admin = default_dict["admin"]

print(admin)

admin["age"] = 34

print(admin)

# 輸出如下

{'name': '', 'age': 0}

{'name': '', 'age': 34}

上述示例我們給 defaultdict 傳了一個自定義函數,當字典中不存在所取 key 時返回默認的用戶信息。

collections 總結

本文總結了 collections 提供的便利的操作,掌握這些知識將大大提高你的編程效率。

4. 代碼地址

參考資料

關注公眾號:python技術,回復"python"一起學習交流

總結

以上是生活随笔為你收集整理的python3 collections模块 tree_第30天: Python collections 模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。