欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python語言中的常用容器(集合)示例詳解

 更新時(shí)間:2025年09月23日 10:46:10   作者:_bong  
Python集合是一種無序且不重復(fù)的數(shù)據(jù)容器,它可以存儲(chǔ)任意類型的對(duì)象,包括數(shù)字、字符串、元組等,下面這篇文章主要介紹了python語言中常用容器(集合)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

1.核心內(nèi)置容器

1. 列表

  • 類型名list

  • 可變性可變

  • 有序性有序(元素按插入順序排列,可通過索引訪問)

  • 元素要求: 可存放任意類型、可重復(fù)的元素。

  • 語法: 使用方括號(hào) [] 創(chuàng)建,元素用逗號(hào)分隔。

  • 主要特性:

    • 最通用、最常用的序列類型。

    • 支持豐富的操作:索引 (lst[0])、切片 (lst[1:3])、拼接 (+)、重復(fù) (*)、成員檢查 (in)。

    • 提供多種方法來修改內(nèi)容:.append().insert().pop().remove().sort() 等。

my_list = [1, 2, 'hello', 3.14, 1] # 可重復(fù),不同類型
my_list[0] = 100 # 可變,可以修改元素
print(my_list) # 輸出: [100, 2, 'hello', 3.14, 1]

2. 元組

  • 類型名tuple

  • 可變性不可變

  • 有序性有序(元素按插入順序排列,可通過索引訪問)

  • 元素要求: 可存放任意類型、可重復(fù)的元素。

  • 語法: 使用圓括號(hào) () 創(chuàng)建,元素用逗號(hào)分隔。單元素元組需加逗號(hào)(如 (1,))。

  • 主要特性:

    • 一旦創(chuàng)建,其內(nèi)容無法修改(但如果元素本身是可變對(duì)象,如列表,則該列表的內(nèi)容可以修改)。

    • 因其不可變性,常用于需要數(shù)據(jù)安全、保證不會(huì)被更改的場(chǎng)景,如作為字典的鍵、函數(shù)返回多個(gè)值等。

    • 性能通常略優(yōu)于列表。

my_tuple = (1, 2, 'world', [3, 4])
# my_tuple[0] = 100 # 錯(cuò)誤!元組不可變
my_tuple[3].append(5) # 正確。因?yàn)樵M中的列表是可變的
print(my_tuple) # 輸出: (1, 2, 'world', [3, 4, 5])

3. 集合

  • 類型名set

  • 可變性可變

  • 有序性無序(Python 3.7+ 后,實(shí)現(xiàn)細(xì)節(jié)上保留了插入順序,但絕不能依賴于此進(jìn)行編程。從語言定義上講,它是無序的)。

  • 元素要求: 元素必須是可哈希的(如數(shù)字、字符串、元組等不可變類型)。元素不可重復(fù)。

  • 語法: 使用花括號(hào) {} 創(chuàng)建(但空集合必須用 set() 創(chuàng)建),元素用逗號(hào)分隔。

  • 主要特性:

    • 核心功能是去重成員關(guān)系測(cè)試(檢查元素是否存在),這兩項(xiàng)操作效率極高(時(shí)間復(fù)雜度為 O(1))。

    • 支持?jǐn)?shù)學(xué)上的集合運(yùn)算:并集 (|), 交集 (&), 差集 (-), 對(duì)稱差集 (^)。

my_set = {1, 2, 3, 2, 'hello'} # 自動(dòng)去重
print(my_set) # 輸出可能是 {1, 2, 3, 'hello'} (順序不確定)
my_set.add(4) # 可變,可以添加元素
print(2 in my_set) # 成員檢查,輸出: True

4. 凍結(jié)集合

  • 類型名frozenset

  • 可變性不可變

  • 有序性無序

  • 元素要求: 同 set,元素必須是可哈希的且不可重復(fù)。

  • 語法: 使用 frozenset() 函數(shù)創(chuàng)建,可傳入一個(gè)可迭代對(duì)象(如列表、元組)。

  • 主要特性:

    • 具有 set 的所有特性(去重、成員測(cè)試、集合運(yùn)算),但內(nèi)容不可變。

    • 因其不可變性,它本身是可哈希的,因此可以作為字典的鍵或另一個(gè)集合的元素。

my_frozenset = frozenset([1, 2, 2, 3])
print(my_frozenset) # 輸出: frozenset({1, 2, 3})
# my_frozenset.add(4) # 錯(cuò)誤!不可變集合

5. 字典

  • 類型名dict

  • 可變性可變

  • 有序性有序(自 Python 3.7 起,字典正式保持鍵的插入順序)。

  • 元素要求必須是可哈希的,可以是任意對(duì)象。鍵不可重復(fù)

  • 語法: 使用花括號(hào) {} 創(chuàng)建,鍵值對(duì)形式 key: value,用逗號(hào)分隔。空字典為 {}。

  • 主要特性:

    • 存儲(chǔ)鍵值對(duì)映射關(guān)系,通過鍵來高效地查找、插入和刪除對(duì)應(yīng)的值(時(shí)間復(fù)雜度為 O(1))。

    • 是 Python 中極其重要的數(shù)據(jù)結(jié)構(gòu)。

my_dict = {'name': 'Alice', 'age': 25, 1: 'number'}
my_dict['country'] = 'USA' # 添加新的鍵值對(duì)
print(my_dict['name']) # 通過鍵訪問值,輸出: Alice
print(list(my_dict.keys())) # 輸出鍵列表: ['name', 'age', 1, 'country'] (保持插入順序)

2.collections模塊中的高級(jí)集合

  collections 模塊提供了多種專門化的容器數(shù)據(jù)類型,它們是對(duì) Python 通用內(nèi)置容器(如字典、列表、集合)的強(qiáng)大補(bǔ)充。這些數(shù)據(jù)結(jié)構(gòu)針對(duì)特定用例進(jìn)行了優(yōu)化,能夠提供更好的性能或更便利的接口。

6. 命名元組

  namedtuple 是元組的子類,它為元組的每個(gè)位置分配一個(gè)名稱,同時(shí)保留元組的特性(不可變、有序、可通過索引訪問)。普通元組需要通過數(shù)字索引訪問元素(如 point[0]point[1]),這使得代碼可讀性差且容易出錯(cuò)。namedtuple 允許使用有意義的名稱訪問相同的數(shù)據(jù)。

from collections import namedtuple

# 創(chuàng)建一個(gè)名為'Point'的namedtuple類,具有字段'x'和'y'
Point = namedtuple('Point', ['x', 'y'])

# 創(chuàng)建實(shí)例
p = Point(11, y=22)

# 訪問字段
print(p.x)    # 輸出: 11
print(p.y)    # 輸出: 22
print(p[0])   # 仍然可以通過索引訪問: 11

# 不可變性(繼承自元組)
# p.x = 33  # 這會(huì)報(bào)錯(cuò):AttributeError: can't set attribute

7. 雙端隊(duì)列

  deque是一個(gè)線程安全、可以快速從兩端添加或刪除元素的序列容器。Python 的列表在尾部操作(追加和彈出)非常高效(O(1)時(shí)間復(fù)雜度),但在頭部操作(插入和刪除)效率較低(O(n)時(shí)間復(fù)雜度)。deque 在兩端操作都是 O(1) 時(shí)間復(fù)雜度。

from collections import deque

# 創(chuàng)建雙端隊(duì)列
d = deque(['b', 'c', 'd'])

# 從左側(cè)添加元素
d.appendleft('a')   # deque(['a', 'b', 'c', 'd'])

# 從右側(cè)添加元素
d.append('e')       # deque(['a', 'b', 'c', 'd', 'e'])

# 從左側(cè)彈出元素
left_item = d.popleft()  # 'a', deque變?yōu)閇'b', 'c', 'd', 'e']

# 從右側(cè)彈出元素
right_item = d.pop()     # 'e', deque變?yōu)閇'b', 'c', 'd']

# 限制最大長(zhǎng)度(當(dāng)隊(duì)列滿時(shí),添加新元素會(huì)從另一端自動(dòng)刪除元素)
limited_deque = deque(maxlen=3)
limited_deque.extend([1, 2, 3])  # deque([1, 2, 3], maxlen=3)
limited_deque.append(4)          # deque([2, 3, 4], maxlen=3) - 自動(dòng)刪除最左邊的1

8. 計(jì)數(shù)器

  Counter 是 dict 的子類,用于統(tǒng)計(jì)可哈希對(duì)象的出現(xiàn)次數(shù)。它是一個(gè)無序集合,其中元素存儲(chǔ)為字典鍵,它們的計(jì)數(shù)存儲(chǔ)為字典值。手動(dòng)統(tǒng)計(jì)元素頻率需要編寫循環(huán)和條件判斷,而 Counter 提供了簡(jiǎn)潔高效的接口來完成這一常見任務(wù)。

from collections import Counter

# 從可迭代對(duì)象創(chuàng)建
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
word_count = Counter(words)
print(word_count)  # Counter({'apple': 3, 'banana': 2, 'orange': 1})

# 從映射創(chuàng)建
c = Counter({'red': 4, 'blue': 2})  # Counter({'red': 4, 'blue': 2})

# 從關(guān)鍵字參數(shù)創(chuàng)建
c = Counter(cats=4, dogs=8)  # Counter({'dogs': 8, 'cats': 4})

# 常用操作
print(word_count.most_common(2))  # 出現(xiàn)頻率最高的2個(gè)元素: [('apple', 3), ('banana', 2)]

c = Counter(a=3, b=1)
d = Counter(a=1, b=2)
print(c + d)   # 相加: Counter({'a': 4, 'b': 3})
print(c - d)   # 相減: Counter({'a': 2})
print(c & d)   # 交集: Counter({'a': 1, 'b': 1})
print(c | d)   # 并集: Counter({'a': 3, 'b': 2})

9. 默認(rèn)字典

  defaultdict 是 dict 的子類,它重寫了一個(gè)方法并添加了一個(gè)可寫的實(shí)例變量。當(dāng)嘗試訪問不存在的鍵時(shí),它會(huì)自動(dòng)創(chuàng)建該鍵并使用提供的工廠函數(shù)初始化其值。使用普通字典時(shí),訪問不存在的鍵會(huì)引發(fā) KeyError,需要先檢查鍵是否存在或使用 get() 方法。defaultdict 自動(dòng)處理這種情況,使代碼更簡(jiǎn)潔。

from collections import defaultdict

# 使用list作為工廠函數(shù),當(dāng)鍵不存在時(shí)創(chuàng)建空列表
dd = defaultdict(list)

dd['fruits'].append('apple')  # 自動(dòng)創(chuàng)建'fruits'鍵并初始化為空列表
dd['fruits'].append('banana')
print(dd)  # defaultdict(<class 'list'>, {'fruits': ['apple', 'banana']})

# 使用int作為工廠函數(shù),默認(rèn)值為0
counts = defaultdict(int)
counts['apple'] += 1  # 自動(dòng)創(chuàng)建'apple'鍵并初始化為0,然后加1
print(counts)  # defaultdict(<class 'int'>, {'apple': 1})

# 使用lambda函數(shù)提供自定義默認(rèn)值
prices = defaultdict(lambda: 10.0)  # 默認(rèn)價(jià)格為10.0
print(prices['unknown_item'])  # 輸出: 10.0

3.numpy數(shù)組

NumPy 是 Python 科學(xué)計(jì)算生態(tài)系統(tǒng)的基石核心庫。幾乎所有處理數(shù)據(jù)、進(jìn)行科學(xué)計(jì)算或機(jī)器學(xué)習(xí)的 Python 工具(如 Pandas, Scikit-learn, SciPy, TensorFlow, PyTorch)都構(gòu)建在 NumPy 的基礎(chǔ)之上。這也是為什么numpy單獨(dú)開一章來講!

對(duì)比一下list與numpy:

# 使用 Python list (效率低)
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
result = []
for x, y in zip(a, b):
    result.append(x**2 + y**2)

# 使用 NumPy (高效、簡(jiǎn)潔)
import numpy as np
a_np = np.array([1, 2, 3, 4])
b_np = np.array([5, 6, 7, 8])
result_np = a_np**2 + b_np**2 # 直接對(duì)整個(gè)數(shù)組操作

numpy無需編寫循環(huán),就可以直接對(duì)整個(gè)數(shù)組進(jìn)行算術(shù)運(yùn)算、邏輯運(yùn)算等。這得益于其廣播(Broadcasting) 機(jī)制,使得不同形狀的數(shù)組可以進(jìn)行數(shù)學(xué)運(yùn)算。

廣播規(guī)則:從尾部維度開始,向前面維度推進(jìn),如果兩個(gè)數(shù)組的維度大小相等其中一個(gè)為1,則它們是兼容的,可以進(jìn)行廣播。

# 將一個(gè)向量加到矩陣的每一行上
a = np.array([[1, 2, 3],
              [4, 5, 6]]) # Shape: (2, 3)
b = np.array([10, 20, 30])   # Shape: (3,)
# b 的 shape 會(huì)被“廣播”成 (1, 3),然后再“廣播”成 (2, 3)
result = a + b
print(result)
# [[11 22 33]
#  [14 25 36]]

除此之外numpy還有更多更強(qiáng)大的優(yōu)勢(shì),例如具有豐富的數(shù)學(xué)函數(shù)庫提供了大量標(biāo)準(zhǔn)的數(shù)學(xué)函數(shù)(sincosexplog...)、線性代數(shù)運(yùn)算(矩陣乘法、求逆、行列式...)、隨機(jī)數(shù)生成、傅里葉變換等,全部針對(duì)數(shù)組進(jìn)行優(yōu)化;強(qiáng)大的索引功能,除了類似列表的基礎(chǔ)索引,還支持布爾索引、花式索引等,可以非常靈活地訪問和修改數(shù)組數(shù)據(jù)。等等優(yōu)勢(shì)

下面簡(jiǎn)要介紹一下numpy的基礎(chǔ)用法

3.1 導(dǎo)入 NumPy

import numpy as np

3.2 創(chuàng)建數(shù)組

# 從列表創(chuàng)建
arr1 = np.array([1, 2, 3, 4, 5])          # 一維數(shù)組
arr2 = np.array([[1, 2, 3], [4, 5, 6]])   # 二維數(shù)組

# 使用內(nèi)置函數(shù)創(chuàng)建
zeros_arr = np.zeros((3, 4))      # 創(chuàng)建 3x4 的全0數(shù)組
ones_arr = np.ones((2, 3))        # 創(chuàng)建 2x3 的全1數(shù)組
empty_arr = np.empty((2, 2))      # 創(chuàng)建未初始化的數(shù)組(內(nèi)容隨機(jī))
range_arr = np.arange(0, 10, 2)   # 類似 range(), 創(chuàng)建 [0, 2, 4, 6, 8]
linspace_arr = np.linspace(0, 1, 5) # 在0到1之間創(chuàng)建5個(gè)等間隔的數(shù) [0., 0.25, 0.5, 0.75, 1.]

# 創(chuàng)建隨機(jī)數(shù)組
random_arr = np.random.rand(3, 2) # 創(chuàng)建 3x2 的數(shù)組,元素來自[0,1)的均勻分布
randn_arr = np.random.randn(1000) # 創(chuàng)建1000個(gè)符合標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)數(shù)

3.3數(shù)組的屬性

arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.ndim)    # 數(shù)組的維數(shù) (秩): 2
print(arr.shape)   # 數(shù)組的維度 (行數(shù), 列數(shù)): (2, 3)
print(arr.size)    # 數(shù)組的元素總數(shù): 6
print(arr.dtype)   # 數(shù)組中元素的數(shù)據(jù)類型: int64 (取決于系統(tǒng))

3.4切片功能

arr = np.array([[1, 2, 3, 4],
                [5, 6, 7, 8],
                [9, 10, 11, 12]])

# 基礎(chǔ)索引
print(arr[0, 1])   # 獲取第0行第1列的元素: 2

# 切片 (支持負(fù)索引和步長(zhǎng))
print(arr[:2, 1:3]) # 前兩行,第1到2列:
                    # [[2, 3],
                    #  [6, 7]]

# 布爾索引 (非常強(qiáng)大!)
mask = arr > 5
print(mask)        # 布爾數(shù)組: [[False False False False],
                   #           [False  True  True  True],
                   #           [ True  True  True  True]]
print(arr[mask])   # 獲取所有大于5的元素: [ 6  7  8  9 10 11 12]

# 花式索引 (使用整數(shù)數(shù)組進(jìn)行索引)
rows = np.array([0, 2])
cols = np.array([1, 3])
print(arr[rows, cols]) # 獲取(0,1)和(2,3)位置上的元素: [ 2 12]

3.5數(shù)組計(jì)算

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 元素級(jí)運(yùn)算
print(a + b)   # [5 7 9]
print(a * b)   # [4 10 18] (逐元素相乘,不是矩陣乘法!)
print(a ** 2)  # [1 4 9]
print(np.sin(a)) # 對(duì)每個(gè)元素求正弦

# 矩陣乘法 (使用 @ 運(yùn)算符或 .dot() 方法)
x = np.array([[1, 2], [3, 4]])
y = np.array([[5, 6], [7, 8]])
print(x @ y)      # 矩陣乘法: [[19 22],
                  #           [43 50]]
print(x.dot(y))   # 同上

# 聚合函數(shù) (對(duì)整組數(shù)據(jù)進(jìn)行計(jì)算)
arr = np.array([1, 2, 3, 4, 5])
print(arr.sum())      # 總和: 15
print(arr.mean())     # 平均值: 3.0
print(arr.std())      # 標(biāo)準(zhǔn)差
print(arr.min())      # 最小值: 1
print(arr.max())      # 最大值: 5
print(arr.argmax())   # 最大值的索引: 4

4.總結(jié)

完,以上就是python中常用的一些容器!

到此這篇關(guān)于python語言中的常用容器(集合)的文章就介紹到這了,更多相關(guān)python常用容器(集合)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?pandas按行、按列遍歷DataFrame的幾種方式

    Python?pandas按行、按列遍歷DataFrame的幾種方式

    在python的DataFrame中,因?yàn)閿?shù)據(jù)中可以有多個(gè)行和列,而且每行代表一個(gè)數(shù)據(jù)樣本,我們可以將DataFrame看作數(shù)據(jù)表,那你知道如何按照數(shù)據(jù)表中的行遍歷嗎,下面這篇文章主要給大家介紹了關(guān)于Python?pandas按行、按列遍歷DataFrame的幾種方式,需要的朋友可以參考下
    2022-09-09
  • Django 外鍵的使用方法詳解

    Django 外鍵的使用方法詳解

    這篇文章主要介紹了Django 外鍵的使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解python3中tkinter知識(shí)點(diǎn)

    詳解python3中tkinter知識(shí)點(diǎn)

    本篇文章給大家分享了關(guān)于python3中tkinter的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼,有興趣的朋友參考下。
    2018-06-06
  • Python實(shí)用技巧之利用元組代替字典并為元組元素命名

    Python實(shí)用技巧之利用元組代替字典并為元組元素命名

    這篇文章主要給大家介紹了關(guān)于Python實(shí)用技巧之利用元組代替字典并為元組元素命名的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2018-07-07
  • python實(shí)現(xiàn)祝福彈窗效果

    python實(shí)現(xiàn)祝福彈窗效果

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)祝福彈窗效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 如何利用Python動(dòng)態(tài)模擬太陽系運(yùn)轉(zhuǎn)

    如何利用Python動(dòng)態(tài)模擬太陽系運(yùn)轉(zhuǎn)

    這篇文章主要給大家介紹了關(guān)于如何利用Python動(dòng)態(tài)模擬太陽系運(yùn)轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python實(shí)現(xiàn)郵件自動(dòng)下載的示例詳解

    Python實(shí)現(xiàn)郵件自動(dòng)下載的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Python語言實(shí)現(xiàn)郵件自動(dòng)下載以及附件解析功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-07-07
  • pytest接口自動(dòng)化測(cè)試框架搭建的全過程

    pytest接口自動(dòng)化測(cè)試框架搭建的全過程

    pytest是Python的一種單元測(cè)試框架,可用來組織用例執(zhí)行,用例斷言,下面這篇文章主要給大家介紹了關(guān)于pytest接口自動(dòng)化測(cè)試框架搭建的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 為什么說Python可以實(shí)現(xiàn)所有的算法

    為什么說Python可以實(shí)現(xiàn)所有的算法

    在本篇文章里小編給各位整理的是關(guān)于一個(gè)Python就可以實(shí)現(xiàn)所有的算法的相關(guān)文章,需要的朋友們參考下。
    2019-10-10
  • python 以16進(jìn)制打印輸出的方法

    python 以16進(jìn)制打印輸出的方法

    今天小編就為大家分享一篇python 以16進(jìn)制打印輸出的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評(píng)論