Rui Tao's Portfolio

Python 列表构造与常见陷阱

Python list cheatsheet.png
Published on
/3 mins read/---

Python 列表构造与常见陷阱

本文是一份专为面试、写代码时快速查阅设计的 Python 列表构造指南,涵盖了初始化、拷贝、陷阱和推荐表达方式。

🟢 一、基础构造:长度为 n 的空列表

res = [''] * n  # 字符列表,占位用
zeros = [0] * n  # 全 0 列表
flags = [False] * n  # 全 False 列表
  • ✅ 推荐:高效且可索引赋值
  • ❌ 注意:可变对象请小心(见陷阱)

🔵 二、二维列表初始化

✅ 正确写法(推荐)

matrix = [[0] * cols for _ in range(rows)]

❌ 错误写法(陷阱)

matrix = [[0] * cols] * rows  # 所有行是同一个引用

问题:

matrix[0][0] = 1
print(matrix)
# 正确写法输出: [[1, 0, ...], [0, 0, ...], ...]
# 错误写法输出: [[1, 0, ...], [1, 0, ...], ...](全部都变了)

🟡 三、列表拷贝方式(避免引用错误)

a = [1, 2, 3]
 
b = a[:]         # ✅ 浅拷贝
c = list(a)      # ✅ 拷贝
d = a.copy()     # ✅ 拷贝
e = a            # ❌ 引用同一个对象(改一个全变)
 
a[0] = 99
print(b[0])  # 正确写法中 b[0] 仍为 1
print(e[0])  # e[0] 会变成 99

🟣 四、避免常见乘法陷阱

写法解释结果
[''] * 3正确,生成 ['', '', '']
['' * 3]错误,相当于 ['']
[[]] * 3错误,3 个引用指向同一个空列表
[[] for _ in range(3)]正确,生成三个独立空列表

🔴 五、空列表判断

if not lst:  # ✅ 判断空列表

🟤 六、面试常用构造句型

用法写法
创建 n 个 None[None] * n
创建 n 个字典[{} for _ in range(n)]
创建字符列表list(s) 将字符串转为列表
创建索引列表list(range(n))
创建二维布尔表[[False]*cols for _ in range(rows)]