2024-04-25 06:10:33 发布
网友
s是所有值都初始化为零的整数列表。我只想将第一行的第一个元素增加1,但是下面的命令将每行的第一个元素增加1。我怎样才能做到这一点?你知道吗
s
In [6]: s = [[0]*4]*4 In [7]: s[0][0] += 1 In [8]: s Out[8]: [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]
好的!谢谢你的建议,问题出在我的s
如果s确实是一个列表列表(而不是一个包含对同一个列表的多个引用的列表),那么您所做的工作是有效的,您的问题必须在其他地方
>>> s = [[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]] >>> s[0][0] 0 >>> s[0][0] = 1 >>> s [[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
这是典型的Python疏忽,因为列表分配是通过引用而不是深度复制完成的。你知道吗
例如,如果你用这种方法构建的话,它就会出错。你知道吗
>>> zeros = [0,0,0,0] >>> s = [zeros,zeros,zeros,zeros] >>> s[0][0]+=1 >>> s [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
所以在复制列表时使用如下
>>> s = [list(zeros), list(zeros), list(zeros), list(zeros)] >>> s[0][0]+=1 >>> s [[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
你一开始就“错误地”列出了你的列表;列表中的每个元素只是指向同一个列表。当你更新列表时,它们都会更新。你知道吗
使用如下代码创建列表:
s = [[0 for _ in range(5)] for _ in range(5)]
如果s确实是一个列表列表(而不是一个包含对同一个列表的多个引用的列表),那么您所做的工作是有效的,您的问题必须在其他地方
这是典型的Python疏忽,因为列表分配是通过引用而不是深度复制完成的。你知道吗
例如,如果你用这种方法构建的话,它就会出错。你知道吗
所以在复制列表时使用如下
你一开始就“错误地”列出了你的列表;列表中的每个元素只是指向同一个列表。当你更新列表时,它们都会更新。你知道吗
使用如下代码创建列表:
相关问题 更多 >
编程相关推荐