我是Python新手,尝试初始化一个像这样的2D数组(仅粘贴代码摘录)
ary = [[0]*cols]*rows
为了插入,我正在做
def Insert(self, val):
ary[0][2] = val
在那之后,我像这样插入值:myS.插入(15)
当我尝试使用循环打印数组时,它应该只在索引0,2处打印值15。但它是针对每个索引打印该值,例如。1,2,2,3,2,以此类推
for r in range(self.rows):
for c in range(self.cols):
#print (self.sheet[r][c])
self.col = c
print ('value at row index ', r, ' col index ', c , ' is ', self.sheet[r][c])
输出
value at row index 0 col index 0 is 0
value at row index 0 col index 1 is 0
value at row index 0 col index 2 is 15
value at row index 0 col index 3 is 20
value at row index 0 col index 4 is 0
value at row index 1 col index 0 is 0
value at row index 1 col index 1 is 0
value at row index 1 col index 2 is 15
value at row index 1 col index 3 is 20
value at row index 1 col index 4 is 0
你知道我做错了什么吗?是赋值还是循环
2条答案
按热度按时间izj3ouym1#
基本上,在python中,对一个元素的列表使用 * 操作符会创建一个以该元素为默认值的列表。
但是在一个完整的列表上使用它会创建指向同一内存地址的列表副本,所以当你改变一行时,你会改变所有的列表,因为它们指向同一个列表。
生成如下:
使用列表解析“禁用”了内存地址的复制,而是创建实际的副本。
x8diyxa72#
你可以通过使用
numpy array
来解决这个问题,然后简单地将你的值赋给正确的索引。还要注意你的函数名,因为已经有一个原生的
insert
方法用于列表!干杯