This question already has answers here:
List of lists changes reflected across sublists unexpectedly
(13个答案)
三年前关闭。
我试图用Python3中的列表构造一个矩阵。
当我实现以下功能时,
我得到以下结果:
我原以为第一行和第一列将用零填充,而所有其他元素将是行和列索引的总和。这不是我在这里得到的,每一行都是其他行的副本。有人能给我解释一下(a)发生了什么(b)我怎样才能解决这个问题吗?
而是建立你的零名单。
编辑:
阅读剩下的问题,你可能会在一个列表理解中完成整个事情
(13个答案)
三年前关闭。
我试图用Python3中的列表构造一个矩阵。
当我实现以下功能时,
def myfunction(h, l):
resultmat = (h+1) * [(l+1) * [0]]
for i in range(1,h):
for j in range(1, l+1):
resultmat[i][j] = i + j
return resultmat
我得到以下结果:
myfunction(2,3)
Out[42]: [[0, 2, 3, 4], [0, 2, 3, 4], [0, 2, 3, 4]]
我原以为第一行和第一列将用零填充,而所有其他元素将是行和列索引的总和。这不是我在这里得到的,每一行都是其他行的副本。有人能给我解释一下(a)发生了什么(b)我怎样才能解决这个问题吗?
最佳答案
问题是列表乘法。你没有得到四个列表,你得到一个列表四次。使用
resultmat = [[0 for i in range(h+1)] for j in range(l+1)]
而是建立你的零名单。
编辑:
阅读剩下的问题,你可能会在一个列表理解中完成整个事情
[[i+j if i and j else 0 for i in range(h+1)] for j in range(l+1)]
关于python - 在Python中用列表列表构造矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39709695/