最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python基礎指南之collections模塊中高效容器對比與選擇詳解

 更新時間:2026年07月20日 08:45:12   作者:老師好,我是劉同學  
Python的?collections?模塊提供了多種高性能的容器數(shù)據(jù)類型,用于替代或增強內置的?list、dict、tuple?等,本文將詳細介紹這些容器的核心用法與性能優(yōu)勢,讓你的代碼更簡潔高效

Python的 collections 模塊提供了多種高性能的容器數(shù)據(jù)類型,用于替代或增強內置的 list、dict、tuple 等,以解決特定場景下的編程需求,提升代碼效率和可讀性 。

核心數(shù)據(jù)結構及常用用法

數(shù)據(jù)結構主要功能典型應用場景
namedtuple創(chuàng)建帶有字段名的元組子類定義輕量級、不可變的數(shù)據(jù)對象,如坐標點、數(shù)據(jù)庫記錄
deque高效的雙端隊列實現(xiàn)隊列、棧,或需要頻繁在兩端添加/刪除元素的場景
Counter計數(shù)器,用于統(tǒng)計可哈希對象統(tǒng)計詞頻、元素出現(xiàn)次數(shù),找 Top N 元素
defaultdict帶默認工廠的字典分組、歸類數(shù)據(jù),避免鍵不存在時的 KeyError 檢查
OrderedDict保持元素插入順序的字典需要記住元素插入順序或實現(xiàn) LRU 緩存
ChainMap將多個映射鏈接為單個視圖管理多層配置(如默認配置、用戶配置、環(huán)境配置)

1. namedtuple:命名元組

用于創(chuàng)建具有命名字段的元組子類,使代碼更易讀。

from collections import namedtuple

# 定義一個表示二維坐標點的命名元組
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, y=20)
print(p.x, p.y)  # 輸出: 10 20print(p[0] + p[1])  # 輸出: 30,仍支持索引訪問

# 定義一個表示用戶信息的命名元組
User = namedtuple('User', 'name age city')
user1 = User('Alice', 30, 'Beijing')
print(f"{user1.name} lives in {user1.city}")  # 輸出: Alice lives in Beijing

2. deque:雙端隊列

支持從兩端快速添加和彈出元素,線程安全。

from collections import deque

# 初始化一個雙端隊列
d = deque([1, 2, 3])
d.append(4)        # 右側添加元素 -> deque([1, 2, 3, 4])
d.appendleft(0)    # 左側添加元素 -> deque([0, 1, 2, 3, 4])
print(d.pop())     # 輸出: 4,從右側彈出
print(d.popleft()) # 輸出: 0,從左側彈出

# 創(chuàng)建固定長度的隊列,當隊列滿時,添加新元素會擠出另一端元素
rolling_window = deque(maxlen=3)
for i in range(5):
    rolling_window.append(i)
    print(rolling_window)  # 輸出: deque([0], maxlen=3) -> deque([0,1], maxlen=3) -> ... -> deque([2,3,4], maxlen=3)

3. Counter:計數(shù)器

用于統(tǒng)計可迭代對象中元素的出現(xiàn)次數(shù)。

from collections import Counter

# 統(tǒng)計列表元素頻率
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
word_counts = Counter(words)
print(word_counts)  # 輸出: Counter({'apple': 3, 'banana': 2, 'orange': 1})

# 直接統(tǒng)計字符串字符
char_counter = Counter('abracadabra')
print(char_counter.most_common(3))  # 輸出: [('a', 5), ('b', 2), ('r', 2)],出現(xiàn)頻率最高的3個# 計數(shù)器支持數(shù)學運算
c1 = Counter(a=3, b=1)
c2 = Counter(a=1, b=2)
print(c1 + c2)   # 輸出: Counter({'a': 4, 'b': 3})
print(c1 - c2)   # 輸出: Counter({'a': 2}),只保留正數(shù)計數(shù)

4. defaultdict:默認字典

在創(chuàng)建字典時提供一個默認值工廠函數(shù),當訪問不存在的鍵時,會自動生成默認值。

from collections import defaultdict

# 值為列表的默認字典,常用于分組
group_by_length = defaultdict(list)
words = ['apple', 'bat', 'bar', 'atom', 'book']
for word in words:
    group_by_length[len(word)].append(word)
print(dict(group_by_length))  # 輸出: {5: ['apple'], 3: ['bat', 'bar', 'atom'], 4: ['book']}

# 值為整數(shù)的默認字典,用于計數(shù)(類似Counter的簡單實現(xiàn))
count_dict = defaultdict(int)
for char in 'programming':
    count_dict[char] += 1
print(dict(count_dict))  # 輸出: {'p':1, 'r':2, 'o':1, ...}

# 使用lambda設置復雜的默認值default_with_lambda = defaultdict(lambda: '未知')
default_with_lambda['name'] = 'Alice'
print(default_with_lambda['age'])  # 輸出: '未知',而不是引發(fā)KeyError

5. OrderedDict:有序字典

記住鍵值對插入的順序(Python 3.7+ 的普通 dict 也已保證插入順序,但 OrderedDict 在相等性比較和重新排序方法上仍有優(yōu)勢)。

from collections import OrderedDict

# 創(chuàng)建有序字典
od = OrderedDict()
od['z'] = 1
od['y'] = 2
od['x'] = 3
print(list(od.keys()))  # 輸出: ['z', 'y', 'x'],保持插入順序

# 移動元素到末尾(可用于實現(xiàn)LRU緩存)
od.move_to_end('z')
print(list(od.keys()))  # 輸出: ['y', 'x', 'z']

# 相等性比較:OrderedDict會考慮順序
od1 = OrderedDict([('a', 1), ('b', 2)])
od2 = OrderedDict([('b', 2), ('a', 1)])
print(od1 == od2)  # 輸出: False,因為順序不同

6. ChainMap:鏈式映射

將多個字典或其他映射組合成一個單一的視圖,查找時按順序搜索底層映射。

from collections import ChainMap

# 模擬配置優(yōu)先級:命令行參數(shù) > 用戶配置 > 默認配置
defaults = {'theme': 'light', 'language': 'en'}
user_config = {'theme': 'dark'}
cli_args = {}

# 創(chuàng)建鏈式映射,查找順序從左到右
config = ChainMap(cli_args, user_config, defaults)
print(config['theme'])   # 輸出: 'dark',優(yōu)先使用user_config中的值
print(config['language'])# 輸出: 'en',user_config中沒有,回退到defaults

# 新增更新只影響第一個映射
config['language'] = 'zh'
print(user_config) # 輸出: {'theme': 'dark', 'language': 'zh'}

進階與性能考量

collections 模塊還提供了 UserDict、UserListUserString 等類,用于方便地創(chuàng)建自定義的字典、列表、字符串子類 。在性能上,deque 在兩端操作(appendleft/popleft)上比 listinsert(0, item)/pop(0) 快得多(O(1) vs O(n))。Counterdefaultdict 在統(tǒng)計和分組任務中,也比手動使用普通 dict 并檢查鍵是否存在更簡潔高效 。

到此這篇關于Python基礎指南之collections模塊中高效容器對比與選擇詳解的文章就介紹到這了,更多相關Python collections容器選擇內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • PyTorch中topk函數(shù)的用法詳解

    PyTorch中topk函數(shù)的用法詳解

    今天小編就為大家分享一篇PyTorch中topk函數(shù)的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python庫中可以操作JavaScript盤點解析

    Python庫中可以操作JavaScript盤點解析

    這篇文章主要為大家介紹了Python庫之可以操作JavaScript盤點解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 用python刪除java文件頭上版權信息的方法

    用python刪除java文件頭上版權信息的方法

    在使用他人代碼時,為不保留文件頭部版權信息,需要一個個刪掉,下面是用python刪除java文件頭上的版權信息的方法
    2014-07-07
  • 詳解Python的Flask框架中的signals信號機制

    詳解Python的Flask框架中的signals信號機制

    這里將為大家來詳解Python的Flask框架中的signals信號機制,包括講述信號的用途,并給出創(chuàng)建信號、訂閱信號、發(fā)送信號的方法,需要的朋友可以參考下
    2016-06-06
  • 詳解Django框架中用戶的登錄和退出的實現(xiàn)

    詳解Django框架中用戶的登錄和退出的實現(xiàn)

    這篇文章主要介紹了詳解Django框架中用戶的登錄和退出的實現(xiàn),Django是重多Python人氣框架中最為知名的一個,需要的朋友可以參考下
    2015-07-07
  • 手把手教你使用Python構建簡易版AI寫作工具

    手把手教你使用Python構建簡易版AI寫作工具

    在內容創(chuàng)作爆炸的時代,AI寫作工具已成為創(chuàng)作者提效的利器,本文將使用Python構建簡易版AI寫作工具,并于主流的AI工具進行對比,感興趣的小伙伴可以了解下
    2026-03-03
  • python中如何實現(xiàn)將數(shù)據(jù)分成訓練集與測試集的方法

    python中如何實現(xiàn)將數(shù)據(jù)分成訓練集與測試集的方法

    這篇文章主要介紹了python中如何實現(xiàn)將數(shù)據(jù)分成訓練集與測試集的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Python timeit模塊的使用實踐

    Python timeit模塊的使用實踐

    timeit 模塊是 Python 標準庫中的模塊,無需安裝,直接導入就可以使用。這篇文章主要介紹了Python timeit模塊的使用,需要的朋友可以參考下
    2020-01-01
  • Python獲取接口請求耗時的方法詳解

    Python獲取接口請求耗時的方法詳解

    你想知道我們請求一個url的時候,握手和請求資源分別占用多長時間么?今天我們就來使用python寫個小案例來看看,感興趣的可以跟隨小編一起了解一下
    2023-04-04
  • 爬蟲Python驗證碼識別入門

    爬蟲Python驗證碼識別入門

    這篇文章主要介紹了爬蟲Python驗證碼識別,屬于入門級別的介紹,剛接觸爬蟲的朋友可以參考如下
    2021-08-08

最新評論

鹤壁市| 纳雍县| 杭锦旗| 潼关县| 六安市| 吴堡县| 康乐县| 临夏市| 衡南县| 杨浦区| 宁明县| 黎川县| 库尔勒市| 论坛| 洪雅县| 灵丘县| 吴江市| 安陆市| 宾川县| 友谊县| 广州市| 镇原县| 扎兰屯市| 隆安县| 什邡市| 都兰县| 明星| 盐城市| 兴化市| 辛集市| 庄浪县| 清远市| 南宁市| 灵璧县| 乌审旗| 绥江县| 华池县| 阳东县| 大冶市| 天峨县| 松原市|