Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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_List_Variable Assignment - Fatal编程技术网

Python 在列表中重新指定列表的元素

Python 在列表中重新指定列表的元素,python,list,variable-assignment,Python,List,Variable Assignment,我正在尝试修改列表列表: list = [['0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0']] 特别是当我分配list[0][1]='X'时,list现在是: [['0', 'X', '0', '0', '0', '0'], ['0

我正在尝试修改列表列表:

list = [['0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0']]
特别是当我分配
list[0][1]='X'
时,
list
现在是:

[['0', 'X', '0', '0', '0', '0'], ['0', 'X', '0', '0', '0', '0'], ['0', 'X', '0', '0', '0', '0'], ['0', 'X', '0', '0', '0', '0'], ['0', 'X', '0', '0', '0', '0']]

它不只是重新分配第一个子列表的第二个元素,而是重新分配每个子列表的第一个元素。我不明白为什么会这样。有人知道吗?

您一定已经创建了类似的
列表:

list = [['0', '0', '0', '0', '0', '0']] * 5
执行此操作将创建一个列表,其中包含对同一列表对象的五个引用:

>>> list = [['0', '0', '0', '0', '0', '0']] * 5
>>> id(list[0])
27391360
>>> id(list[1])
27391360
>>> id(list[2])
27391360
>>>
因此,当您修改一个子列表时,它们都会被更改


要解决此问题,请改用:

与当前代码不同,此解决方案将创建一个包含五个唯一子列表的列表。因此,改变一个不会影响其他人

此外,我还将您的列表名称更改为
lst
,以避免隐藏列表。您不应创建与内置名称相同的名称


请注意,您还可以编写:

lst = [['0'] * 6 for _ in range(5)]

执行
['0']*6
在这里不是问题,因为字符串是Python格式的。因此,
['0']*6
创建了一个包含六个唯一字符串对象的列表。但是列表是,因此不能像这样创建。

这是因为您是如何创建
列表的。
。请展示您是如何做到这一点的。因为您的
列表
包含对同一个其他列表的多个引用。这是一个由几十个问题组成的重复,所以(我正在搜索最好的一个),另外。是另一个很好的例子。
lst=[6*['0']表示范围(5)]
更简洁。@khelwood-好主意。我会提到的。谢谢你们,问题解决了。不过有一个问题。如果列表['0','0','0','0','0','0']并不总是相同的,但它存储在某个变量a中,那么您如何在…?@Javierraba中重写“for”部分?您可以通过将列表放入
列表
lst=[list(a)for uuu范围(5)]
来制作列表的副本。虽然我个人可能会使用切片表示法:
lst=[a[:]表示范围(5)]
。有些人可能读不懂,但它更简洁,而且通常更快。完美。非常感谢你
lst = [['0'] * 6 for _ in range(5)]