Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 二维列表的赋值_Python - Fatal编程技术网

Python 二维列表的赋值

Python 二维列表的赋值,python,Python,我正在尝试制作一个简单的机器学习程序,这样我就可以对人工智能有更多的了解,但是遇到了一个问题。我的程序有一个2D列表(101个3个布尔值的列表(总共303个))。它执行多个循环,并且必须在每个循环中将其中一个子列表中的1或2个值设置为True。运行我的程序时,所有值都太快地更改为true。起初,我认为这可能是由于random()运气不好造成的,但后来我发现所有的值在90到100个循环后都发生了变化,这应该是不可能的 我决定在贝壳里做实验 >>> Choises=[[False]

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

我决定在贝壳里做实验

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

为什么它会改变每个列表的第二个值,而不是第二个列表的第二个值呢?

这里发生的事情是,当你创建列表时,你在一次又一次地乘以相同的引用。因此:

choices = [[False] * 3] * 101
实现你想要的更好的方法是:

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

如果你实际上不需要的话,最好不要使用
[…]*n
<代码>[[False for uu in range(3)]for u in range(101)]@chepner这是为什么?