如何在Python中初始化行列可变的2D list(二维列表)
Python 实现行列动态可变二维列表的方案
你之前查到的a1 = [[] * (some integer)] * [(some integer)]写法本身存在两个问题:
- 初始化后行列数固定,无法灵活扩展
- 本质是浅拷贝,所有子列表指向同一块内存地址,修改任意子列表的元素会同步修改所有子列表,属于高频踩坑写法,本身就不推荐使用。
正确动态实现方法
Python 的 list 本身是动态数组,二维 list 本质是元素为 list 的一维 list,无需提前指定行列数,初始化直接创建空列表即可:dynamic_2d = []
常见操作示例
- 新增行:调用外层列表的
append()方法,参数为任意长度的一维列表即可,支持各行长度不一致
示例:新增一行内容为[1,2,3],执行dynamic_2d.append([1,2,3]);新增空行执行dynamic_2d.append([]) - 扩展已有行的列数:直接操作对应下标的子列表调用
append()等方法即可
示例:给第0行新增元素4,执行dynamic_2d[0].append(4) - 删除行/列:直接调用 list 原生的
pop()、remove()、del等方法即可,行列数会随操作动态调整
完整运行示例
# 初始化完全无行列限制的二维列表 dynamic_2d = [] # 动态新增2行,两行初始长度不同 dynamic_2d.append([1, 2]) dynamic_2d.append([3, 4, 5]) print(dynamic_2d) # 输出:[[1, 2], [3, 4, 5]] # 给第0行动态新增1个元素,列数从2变为3 dynamic_2d[0].append(6) print(dynamic_2d) # 输出:[[1, 2, 6], [3, 4, 5]] # 再动态新增第3行 dynamic_2d.append([7]) print(dynamic_2d) # 输出:[[1, 2, 6], [3, 4, 5], [7]]
场景扩展
如果需要初始化时提前生成指定数量的空行,后续再动态扩展列,推荐用列表推导式实现,避免浅拷贝问题:
示例:初始化10行空列表,后续可自由扩展每行的列,也可继续新增行:dynamic_2d = [[] for _ in range(10)]
内容的提问来源于stack exchange,提问作者shsh23
相关产品推荐
相关产品推荐

