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