日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

簡介

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

常用功能

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

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 第一次出現的位置,其余的忽略。同時,我們可以通過返回的新的視圖來更新原來的的字典數據。進一步驗證了該操作不是做的拷貝,而是直接指向原字典。

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

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 問題。

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

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
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定