数据结构

翻译整理自 Python Tutorial - Data Structures。

1. 列表进阶

fruits = ["orange", "apple", "banana"]
fruits.append("kiwi")
fruits.sort()
fruits.pop()         # 弹末尾
fruits.index("apple")
fruits.count("apple")
fruits.reverse()
fruits.copy()
fruits.clear()

列表推导式

squares = [x * x for x in range(10)]
flat = [x for row in matrix for x in row]

嵌套推导

matrix = [
    [1, 2, 3],
    [4, 5, 6],
]
transposed = [[row[i] for row in matrix] for i in range(3)]
# [[1, 4], [2, 5], [3, 6]]

2. del 语句

a = [1, 2, 3, 4, 5]
del a[0]        # [2, 3, 4, 5]
del a[1:3]      # [2, 5]
del a           # 删除变量本身

3. 元组 Tuple

不可变序列:

t = 1, 2, 3
t = (1,)          # 单元素元组
empty = ()
nested = (1, (2, 3))
x, y = (1, 2)     # 解包

元组不可变,但元素若是可变对象则仍可改:

t = ([1],)
t[0].append(2)

4. 集合 Set

无序、无重复元素的容器:

s = {1, 2, 3}
s.add(4)
s.remove(2)
s | {5, 6}        # 并集
s & {3, 4, 5}     # 交集
s - {3}           # 差集
1 in s            # True

集合推导:

{x for x in "abracadabra" if x in "abc"}
# {'a', 'b', 'c'}

5. 字典 Dict

键值映射,键必须可哈希:

d = {"one": 1, "two": 2}
d["three"] = 3
d.get("four", 0)    # 0
d.keys()
d.values()
d.items()
"one" in d
del d["one"]
d.pop("two")
d.update({"x": 0})

字典推导:

{x: x * x for x in range(5)}

遍历

for k, v in d.items():
    print(k, v)

Python 3.7+ 字典保留插入顺序。

6. 循环技巧

# 同时遍历键值
for k, v in d.items(): ...

# 同时遍历多个序列
for a, b in zip(L1, L2): ...

# 反向
for x in reversed(seq): ...

# 排序
for x in sorted(s, key=...): ...

7. 深浅拷贝

import copy
a = [[1, 2], [3, 4]]
b = a              # 引用同一对象
c = a.copy()       # 浅拷贝(外层新,内层共享)
d = copy.deepcopy(a)  # 深拷贝
a[0].append(99)
b[0]   # [1, 2, 99]
c[0]   # [1, 2, 99]  ← 浅拷贝受影响
d[0]   # [1, 2]      ← 深拷贝独立

8. 常用容器总结

类型 可变 有序 重复 示例
list ✅ ✅ ✅ [1, 2, 3]
tuple ❌ ✅ ✅ (1, 2, 3)
set ✅ ❌ ❌ {1, 2, 3}
dict ✅ ✅(3.7+) 键不重复 {"a": 1}
frozenset ❌ ❌ ❌ frozenset({1,2})

小结

熟练使用 list、tuple、set、dict 是 Python 编程的核心基本功。