Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

List (列表)

下面是一份 Python list(列表)最强学习与速查指南,内容依旧保持“简洁 + 全面 + 实战化”风格,涵盖基础、进阶、性能、常见坑、高级用法、推导式、排序、切片、队列/栈模型等。

Python 的 list 是 动态数组(dynamic array),是 Python 使用最频繁的数据结构。

1. list 核心特性

  • 动态数组(可自动扩容)
  • 有序(保持插入顺序)
  • 可变类型(mutable)
  • 元素可以是任意类型
  • 支持切片、排序、推导式

2. 常见创建方式

a = [1, 2, 3]
b = list("abc")          # ['a', 'b', 'c']
c = [i*i for i in range(5)]
d = []                   # 空列表

3. 常用操作(必背)

append()     # 尾部添加
extend()     # 扩展多个元素
insert()     # 指定位置插入

pop()        # 删除最后一个并返回
remove()     # 删除第一个匹配项
clear()      # 清空列表

index()      # 查找元素位置
count()      # 计数

sort()       # 原地排序
sorted()     # 生成新列表

reverse()    # 原地反转
reversed()   # 惰性反转(迭代器)

4. 增删改查示例

增加

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

5. 切片(slice)

lst[start:end]        # 含 start,不含 end
lst[1:5:2]            # 步长
lst[::-1]             # 反转
lst[:]                # 浅拷贝

6. 列表推导式(Pythonic 必备)

基础

[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]

7. 排序

原地排序(修改原列表)

lst.sort()                          # 升序
lst.sort(reverse=True)              # 降序
lst.sort(key=lambda x: x[1])        # 按子项排序

返回新列表

new_lst = sorted(lst)

8. list 高级用法

1) 作为 栈(stack:后进先出)

stack = []
stack.append(1)
stack.append(2)
stack.pop()  # -> 2

2) 作为 队列(FIFO) -> 不推荐

因为 pop(0) 是 O(n) 性能低。

推荐用 collections.deque!

3) 列表展开(解包)

a, b, *rest = [1, 2, 3, 4, 5]

4) 链式合并

merged = [*list1, *list2, *list3]

5) 过滤空数据

clean = [x for x in lst if x]

6) 多层嵌套 flatten

flat = [j for i in nested for j in i]

9. 性能与底层原理

list 本质是动态数组:连续内存 + 自动扩容机制

添加(append):均摊 O(1)

随机访问:O(1)

pop(0)、insert(0):O(n)(需要移动所有元素)

10. 拷贝与深浅复制

浅拷贝(常用)

lst_copy = lst[:]
lst_copy = list(lst)
lst_copy = lst.copy()

深拷贝

import copy
deep = copy.deepcopy(lst)

11. 常见坑

❌ 1) 千万不要这样生成二维数组

x = [[0] * 3] * 3

会创建 同一个对象的 3 个引用。

✅ 正确写法:

x = [[0 for _ in range(3)] for _ in range(3)]

❌ 2) 不要在遍历的同时修改列表

for i in lst:
    lst.remove(i)  # 逻辑错乱

✅ 正确:

for i in lst[:]:
    lst.remove(i)

❌ 3) 列表当队列效率低(使用 deque)

12. 列表 vs 其他容器

类型 特点 场景
list 动态数组,支持切片 通用、多用途
tuple 不可变 安全、可哈希、作为 key
set 去重、无序 集合运算、快速 membership
dict key-value 结构化数据
deque 双端队列 队列/栈高性能场景

13. 列表的最佳实践(开发中常用)

  • 过滤:列表推导式
  • 构造新列表:推导式 or map
  • 扩展列表:extend 而不是 append(list)
  • 队列任务:用 deque
  • 排序:sort(key=…)
  • flattens:双循环推导式
  • 合并:[*a, *b]