python - 分配给二维列表

标签 python

我正在尝试制作一个简单的机器学习程序,以便我可以更多地了解人工智能,但遇到了问题。我的程序有一个 2D 列表(101 个包含 3 个 bool 值的列表(总共 303 个))。它执行多个循环,并且必须在每个循环中将子列表之一中的 1 或 2 个值设置为 True。运行我的程序时,所有值都太快地变为 true。起初,我认为这可能是由于random()运气不好造成的。 ,但后来我看到所有的值在仅 90 到 100 次循环后就发生了变化,这应该是不可能的。

我决定在 shell 中进行实验。

>>> Choises=[[False]*3]*101
>>> Choises[1][1]=True
>>> Choises
[[False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False], [False, True, False]]

到底为什么它改变了每个列表的第二个nd值,而不是仅仅改变了2<的第二个nd值支持>还有一个?

最佳答案

这里发生的情况是,当您创建列表时,您会一遍又一遍地乘以相同的引用。所以:

choices = [[False] * 3] * 101

实现您想要的效果的更好方法是:

choices = [[False for _ in range(3)] for _ in range(101)]
choices[1][1] = True

关于python - 分配给二维列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50475502/

相关文章:

python - 如何使用 optuna trial 在 sklearn MLPRegressor 中设置 hidden_​​layer_sizes

python - 当你添加一个带有 numpy 数组的张量时会发生什么?

python - Python 中的 Hive 子字符串等效项

python - Django - 如何使用 QuerySet 进行过滤以获取对象的子集?

python - 将多个表添加到 plotly plot

python - 如何使用 Python 中的函数返回列表算术运算的结果

python - 更改 Django 的默认通用密码列表

python - 如何通过在字符串中使用\u 或\U 转义来正确表示 python3 (3.6.1+) 中的补充 unicode 字符

python - 尝试访问 Django Rest Framework 中的嵌套序列化程序时出现属性错误

python - 将数据帧行附加到列的向量方法,反之亦然