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

歡迎訪問 生活随笔!

生活随笔

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

python

Python的重要模块:collections (namedtuple、defaultdict、deque、Counter、OrderedDict、ChainMap)

發布時間:2023/12/19 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python的重要模块:collections (namedtuple、defaultdict、deque、Counter、OrderedDict、ChainMap) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

collections 模塊作用

包含雙端隊列 deque、默認字典 defaultdict、命名元組 namedtuple、計數器 Counter、Ordereddict 和 ChainMap 等重要模塊。他們是增強版的高級數據結構。

1. tuple 功能

為了講解 namedtuple,所以先介紹 tuple 的功能,以便分析兩者異同。
tuple 是一個不可變的元組,可迭代對象(內部實現了__iter__,或者__getitem__ 方法),可以進行拆包、tuple 的不可變性不是絕對的。

user_tuple = ('sqz', 23, 'Master') name, age, degree = user_tuple # 這個過程稱為拆包 name, *others = user_tuple # 進階版的拆包 print(name, others) # Output: sqz, [23, 'Master'] name_tuple = ('sqz', ['xiaoming', 'liangliang']) name_tuple[1].append('xiaozhang') # 不可變性,不絕對 print(name_tuple) # Output: ('sqz', ['xiaoming', 'liangliang', 'xiaozhang'])
tuple 和 list 相比的優勢

immutable 的重要性:Python的性能優化(tuple作為常量在編譯時確定,加速腳本)、線程安全(線程無法對其進行修改)、可以作為 dict 的 key 值(可以進行哈希,而 list 不能)、 拆包特性。

2. namedtuple 功能

先來看簡單的應用例子:

from collections import namedtupleUser = namedtuple('User', ['name', 'age', 'height', 'edu']) # 這里面相當于創建了一個簡單的類 user = User(name='sqz', age=23, height=175) user.edu = 'master' # 方便增加新的屬性 print(user.name, user.age, user.height) # Output: sqz 23 175# 另一種賦值方式 user_tuple = ('sqz', 23, 175) user = User(*user_tuple, 'master') print(user.name, user.age, user.height, user.edu) # Output: sqz 23 175 masteruser_dict = { "name":'sqz', "age":23, "height":175 } user = User(**user_dict , edu = 'master')# 使用內置函數_make()賦值,必須保持參數個數一致 user_dict = { "name":'sqz', "age":23, "height":175 "edu" : "master" } user._make(user_dict)# 使用內置函數_asdict()將namedtuple轉化為一個OrderedDict user_info_dict = user._asdict()

特點:

  • 和創建一個簡單類相比,形式更加簡單,代碼簡潔。
  • 節省空間,少了 class 中很多內置的函數和變量。
  • 在對數據庫進行操作時,如果需要給每一個條目增加屬性,使用namedtuple作為數據結構,十分方便。
  • 3. defaultdict 功能

    defaultdict 是通過C語言實現的,性能特別的高。
    defaultdict 的第一大作用:為新加入鍵值 key 分配默認的 value 值。實例如下:

    from collections import defaultdictdefault_dict = defaultdict(int) # 默認 value值為 0 users = ['sqz1', 'sqz2', 'sqz3', 'sqz2', 'sqz3'] # 統計列表中數據出現的次數 for user in users:default_dict[user] += 1

    defaultdict 的第二大作用:設計嵌套的字典結構,示例如下:

    from collections import defaultdictdef gen_default(): # 可調用結構return {"name":"""nums":0} default_dict = defaultdict(gen_default) # 參數傳入可調用結構 default_dict['group1'] # 嵌套字典,group1的 key值為'name','nums'

    4. deque 功能

    C語言實現,效率高。雙端隊列,使用可迭代對象初始化,如 list、tuple、dict。代碼示例:

    from collections import dequeuser_deque = deque(['sqz1', 'sqz2', 'sqz3']) user_deque.appendleft('sqz8') # ['sqz8', 'sqz1', 'sqz2', 'sqz3'] 左側添加數據 user_deque.clear() # 清空數據

    copy() 函數實現淺拷貝

    from collections import dequeuser_deque = deque(['sqz1', 'sqz2', ['sqz3']]) user_copy = user_deque.copy() # 不可變元素直接復制,可變元素直接指向(如 list)。 user_copy[0] = 'sqz100' user_copy[2].append('sqzhaha') print(user_deque) # deque(['sqz1', 'sqz2', ['sqz3', 'sqzhaha']]) print(user_copy) # deque(['sqz100', 'sqz2', ['sqz3', 'sqzhaha']])

    Python 中同樣提供了深拷貝的包:

    import copy from collections import dequeuser_deque = deque(['sqz1', 'sqz2', ['sqz3']]) user_copy = copy.deepcopy(user_deque) # 深拷貝 user_copy[2].append('sqzhaha')print(user_deque) # deque(['sqz1', 'sqz2', ['sqz3']]) print(user_copy) # deque(['sqz1', 'sqz2', ['sqz3', 'sqzhaha']])

    extend() 函數將兩個 deque 合并為一個:

    from collections import dequeuser_deque = deque(['sqz1', 'sqz2', ['sqz3']]) user_deque1 = deque(['haha'])user_deque.extend(user_deque1) # 直接在 user_deque 上進行擴充,沒有返回值

    deque 是線程安全的,而 list 不是。

    5. Counter

    dict 的子類,用于統計元素數目,示例如下:

    from collections import Counterusers = ['sqz1', 'sqz2', 'sqz4', 'sqz1', 'sqz2'] user_counter = Counter(users) print(user_counter) # Counter({'sqz1':2, 'sqz2':2, 'sqz4':1}) 排序好的,次數最多的在前面str_count = Counter('aanncddds') str_count.update("bddc") # 更新統計,增加統計數據str_count.most_common(2) # 取出前兩個出現次數最多的元素

    6. OrderedDict 功能

    排好序的字典。繼承自 dict,dict有的功能它都有。保持字典中元素的添加順序。在Python3中,dict 和 OrderedDict 都是有序的。而在Python2下, dict 無序,而OrderedDict有序。

    from collections import OrderedDictuser_dict = OrderedDict() user_dict['b'] = 'sqz2' user_dict['a'] = 'sqz3' user_dict['c'] = 'sqz1' print(user_dict) # Output: {'b':'sqz2', 'a':'sqz3', 'c':'sqz1'}

    OrderedDict 中一些重要函數:popitem()、move_to_end()

    print(user_dict.popitem()) # ('c', 'sqz1') print(user_dict.pop()) # 會報錯,pop() 函數中應傳遞 key值。print(user_dict.move_to_end('b')) # 輸出Noneprint(user_dict) # 輸出:{'a':'sqz3', 'c':'sqz1', 'b':'sqz2'}

    7. ChainMap 功能

    當想遍歷多個可迭代對象時,將兩個可迭代對象連接起來。在兩個對象上加上迭代器,指向性的,并沒有賦值結構和值。如下例:

    from collections import ChainMapuser_dict1 = {'a':'sqz1', 'b':'sqz2'} user_dict2 = {'c':'sqz2', 'd':'sqz3'} new_dict = ChainMap(user_dict1, user_dict2)for key, value in new_dict.items():print(key, value) # Output: # a sqz1 # b sqz2 # c sqz2 # d sqz3

    當兩個地點中有重復 key值時,只能訪問出現第一次的鍵值對。
    一些重要函數:new_child()、屬性:maps、

    new_dict.new_child({'aa:'aa', 'bb':'bb'}) # add items print(new_dict.maps) # [{'a':'sqz1', 'b':'sqz2'}, {'c':'sqz2', 'd':'sqz3'}, {'aa:'aa', 'bb':'bb'}] 以列表形式展現 new_dict.maps[0]['a'] = 'cherry' # 直接修改原數據

    總結

    以上是生活随笔為你收集整理的Python的重要模块:collections (namedtuple、defaultdict、deque、Counter、OrderedDict、ChainMap)的全部內容,希望文章能夠幫你解決所遇到的問題。

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