List (列表)
下面是一份 Python list(列表)最强学习与速查指南,内容依旧保持“简洁 + 全面 + 实战化”风格,涵盖基础、进阶、性能、常见坑、高级用法、推导式、排序、切片、队列/栈模型等。
Python 的 list 是 动态数组(dynamic array),是 Python 使用最频繁的数据结构。
- 动态数组(可自动扩容)
- 有序(保持插入顺序)
- 可变类型(mutable)
- 元素可以是任意类型
- 支持切片、排序、推导式
a = [1, 2, 3]
b = list("abc") # ['a', 'b', 'c']
c = [i*i for i in range(5)]
d = [] # 空列表
append() # 尾部添加
extend() # 扩展多个元素
insert() # 指定位置插入
pop() # 删除最后一个并返回
remove() # 删除第一个匹配项
clear() # 清空列表
index() # 查找元素位置
count() # 计数
sort() # 原地排序
sorted() # 生成新列表
reverse() # 原地反转
reversed() # 惰性反转(迭代器)
增加
lst.append(4)
lst.extend([5, 6])
lst.insert(0, 99)
删除
lst.pop() # 最后一个
lst.pop(1) # 指定 index
lst.remove(3) # 删除值为3的项
del lst[2] # 删除 index 2
修改
lst[0] = 100
lst[1:3] = [7, 8, 9] # 切片赋值
查询
lst[0]
lst[-1]
lst.index(10)
10 in lst
lst[start:end] # 含 start,不含 end
lst[1:5:2] # 步长
lst[::-1] # 反转
lst[:] # 浅拷贝
基础
[i*2 for i in range(5)]
带过滤
[i for i in range(10) if i % 2 == 0]
嵌套
[(x, y) for x in range(3) for y in range(3)]
处理字典
[k for k, v in d.items() if v > 10]
原地排序(修改原列表)
lst.sort() # 升序
lst.sort(reverse=True) # 降序
lst.sort(key=lambda x: x[1]) # 按子项排序
返回新列表
new_lst = sorted(lst)
stack = []
stack.append(1)
stack.append(2)
stack.pop() # -> 2
因为 pop(0) 是 O(n) 性能低。
推荐用 collections.deque!
a, b, *rest = [1, 2, 3, 4, 5]
merged = [*list1, *list2, *list3]
clean = [x for x in lst if x]
flat = [j for i in nested for j in i]
list 本质是动态数组:连续内存 + 自动扩容机制。
添加(append):均摊 O(1)
随机访问:O(1)
pop(0)、insert(0):O(n)(需要移动所有元素)
浅拷贝(常用)
lst_copy = lst[:]
lst_copy = list(lst)
lst_copy = lst.copy()
深拷贝
import copy
deep = copy.deepcopy(lst)
x = [[0] * 3] * 3
会创建 同一个对象的 3 个引用。
✅ 正确写法:
x = [[0 for _ in range(3)] for _ in range(3)]
for i in lst:
lst.remove(i) # 逻辑错乱
✅ 正确:
for i in lst[:]:
lst.remove(i)
| 类型 | 特点 | 场景 |
|---|---|---|
| list | 动态数组,支持切片 | 通用、多用途 |
| tuple | 不可变 | 安全、可哈希、作为 key |
| set | 去重、无序 | 集合运算、快速 membership |
| dict | key-value | 结构化数据 |
| deque | 双端队列 | 队列/栈高性能场景 |
- 过滤:列表推导式
- 构造新列表:推导式 or map
- 扩展列表:extend 而不是 append(list)
- 队列任务:用 deque
- 排序:sort(key=…)
- flattens:双循环推导式
- 合并:
[*a, *b]