以下是 Python 常用數據結構總結,涵蓋基礎類型、高級容器及適用場景,幫助快速掌握核心用法與特性對比:
一、基礎數據結構
1. 列表(List)
- 特點:有序、可變、允許重複元素。
- 常用操作:
nums = [1, 2, 3] nums.append(4) # 末尾添加 → [1, 2, 3, 4] nums.insert(0, 0) # 插入 → [0, 1, 2, 3, 4] nums.pop() # 移除末尾 → 4 nums[1:3] = [10, 20] # 切片修改 → [0, 10, 20, 3]
- 適用場景:動態數據集合,頻繁增刪或修改元素。
2. 元組(Tuple)
- 特點:有序、不可變、允許重複元素。
- 常用操作:
point = (3, 4) x, y = point # 解包 → x=3, y=4
- 適用場景:存儲不可變數據(如配置項)、函數多返回值。
3. 字典(Dict)
- 特點:鍵值對、無序(Python 3.7+ 保持插入順序)、鍵唯一。
- 常用操作:
user = {"name": "Alice", "age": 30} user["email"] = "alice@example.com" # 添加鍵值對 age = user.get("age", 0) # 安全獲取值 for key, value in user.items(): # 遍曆鍵值對 print(key, value)
- 適用場景:快速查找、關聯數據存儲(如JSON數據)。
4. 集合(Set)
- 特點:無序、元素唯一、支持集合運算。
- 常用操作:
a = {1, 2, 3} b = {3, 4, 5} a | b # 並集 → {1, 2, 3, 4, 5} a & b # 交集 → {3}
- 適用場景:去重、成員檢測、數學集合操作。
二、高級數據結構
1. 雙端隊列(deque)
- 模塊:
collections.deque
- 特點:線程安全、高效頭尾插入/刪除(O(1) 時間複雜度)。
- 示例:
from collections import deque dq = deque([1, 2, 3]) dq.appendleft(0) # 左端添加 → deque([0, 1, 2, 3]) dq.pop() # 右端移除 → 3
- 適用場景:隊列/棧實現、滑動窗口算法。
2. 堆(Heap)
- 模塊:
heapq
- 特點:實現最小堆,堆頂元素始終最小。
- 示例:
import heapq heap = [] heapq.heappush(heap, 3) # 添加元素 → [3] heapq.heappop(heap) # 彈出最小 → 3
- 適用場景:優先隊列、Top K 問題。
3. 命名元組(namedtuple)
- 模塊:
collections.namedtuple
- 特點:具名字段的元組,增強可讀性。
- 示例:
from collections import namedtuple Point = namedtuple("Point", ["x", "y"]) p = Point(3, 4) print(p.x, p.y) # 3 4
- 適用場景:替代簡單類,數據記錄(如CSV行)。
4. 計數器(Counter)
- 模塊:
collections.Counter
- 特點:統計元素出現次數。
- 示例:
from collections import Counter words = ["apple", "banana", "apple"] counter = Counter(words) # {"apple": 2, "banana": 1}
- 適用場景:頻率統計、詞頻分析。
三、數據結構對比
結構 | 有序性 | 可變性 | 元素唯一性 | 查找效率 | 典型用途 |
---|---|---|---|---|---|
列表(list) | 是 | 可變 | 允許重複 | O(n) | 動態集合、序列操作 |
元組(tuple) | 是 | 不可變 | 允許重複 | O(n) | 不可變數據存儲 |
字典(dict) | 無(Python <3.7) 有(Python 3.7+) |
可變 | 鍵唯一 | O(1) | 鍵值映射、快速查找 |
集合(set) | 無 | 可變 | 元素唯一 | O(1) | 去重、集合運算 |
四、選擇原則
- 需要快速查找 → 字典、集合。
- 保持插入順序 → 列表(Python 3.7+ 的字典也保持順序)。
- 不可變數據 → 元組。
- 高效頭尾操作 →
deque
。 - 元素頻率統計 →
Counter
。
五、實用技巧
- 列表推導式:快速生成列表。
squares = [x**2 for x in range(10)]
- 字典推導式:快速構建字典。
word_lengths = {word: len(word) for word in ["apple", "banana"]}
- 合並字典(Python 3.9+):
dict1 = {"a": 1} dict2 = {"b": 2} merged = dict1 | dict2 # {"a": 1, "b": 2}
掌握這些數據結構及其適用場景,能顯著提升代碼效率與可讀性。根據需求選擇最合適的結構,是Python編程的核心技能之一!