python - 无法获得嵌套数组初始化工作?
问题描述
我对这种行为感到困惑
r,c = (5,2)
slist = [[0]*c]*r
print(slist)
for i in range(r):
slist[i][0] = i
print(slist)
输出是
[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
[[4, 0], [4, 0], [4, 0], [4, 0], [4, 0]]
解决方案
当您这样做时[[0] * c] * r
,您将创建一个列表,其中每个元素都是对同一列表的引用。所以,当你改变一个时,它们都会改变。使用带有范围的列表推导来创建唯一列表:
slist = [[0] * c for _ in range(r)]
请参阅此处了解更多信息。
推荐阅读
- javascript - 如何让 Canvas 覆盖下面的其他 Canvas?
- javascript - Discord 机器人错误 - SequelizeDatabaseError: SQLITE_ERROR: no such table: users
- php - 无法准备 SQL 语句
- chart.js - Chart.JS 删除卡在循环中的数据
- java - 对话框在主屏幕上 30 秒后不显示
- laravel - 如何在输入字段中显示 Javascript 数据
- swift - swiftUI 选择器“通用结构 'Picker' 要求 'String' 符合 'View'”
- java - 链表中的 JAVA 类型参数
- node.js - 将数据从数据库传递到 ejs 文件时,ejs 文件中的 forEach 错误
- php - symfony 学说鉴别器错误序列化器