在过去的几天里,我一直在玩python,我不断遇到一个奇怪的问题。(作为参考,我正在研究euler项目的345。) 所以。。。我试着把二维数组的行和列归零,但不是它们相交的点。现在,我知道可能有一种更为python的方法来解决这个问题,但我主要关心的是为什么我这里的代码不起作用。你知道吗
def choose(initial_grid,row,col):
"""Return a grid with a given row and column zeroed except where intersect.
"""
grid = list(initial_grid) #FLAG 1
Special_value = grid[row][col]
grid[row] = [0]*len(grid[row])
for i in xrange(len(grid)):
grid[i][col] = 0
grid[row][col] = Special_value
return grid
qwer = [[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9,10,11,12],
[13,14,15,16]]
print choose(qwer,1,1)
print qwer
无论如何,我希望函数输出
[[1, 0, 3, 4], [0, 6, 0, 0], [9, 0, 11, 12], [13, 0, 15, 16]]
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
但是。。。它不是。不管出于什么原因,qwer
清除了它的第1列。我试过做一个列表副本来取消对initial_grid,
传递的指针的引用,也试过使用grid = initial_grid[:]
,但似乎没有任何效果。你知道吗
怎么了?我该怎么解决这个问题?为什么这是错误的?你知道吗
list(initial_grid)
对列表进行浅层复制。不会复制内部列表。你知道吗演示:
如果您想要深度复制,请使用
copy.deepcopy
。或者对于2D列表,写另外,你的行话是关的。我们在Python中没有指针。我们有名字和价值观。你知道吗
相关问题 更多 >
编程相关推荐