python中没有数组类型,但为了模拟它,我们可以使用列表。我想要用零填充二维类似数组的结构。我的问题是:这两个表达式有什么区别:
zeros = [[0 for i in xrange(M)] for j in xrange(M)]
和
zeros = [[0]*M]*N
zeros
会是一样的吗?在速度和可读性方面,哪一个更好?
发布于 2016-08-20 09:48:07
对于Python 3(不再有xrange),首选答案
zeros = [ [0] * N for _ in range(M)]
对于M x N个零数组
发布于 2012-10-31 20:39:22
在第二种情况下,您创建了一个指向同一列表的引用列表。如果你有像这样的代码:
[lst] * N
其中lst
是对列表的引用,您将看到以下列表:
[lst, lst, lst, lst, ..., lst]
但由于结果列表包含对同一对象的引用,因此如果您更改一行中的值,则该值将在所有其他行中更改。
发布于 2021-09-17 04:27:09
哲虎的答案是更安全的,应该是最好的答案。这是因为如果我们使用接受答案方法
a = [[0] * 2] * 2
a[0][0] = 1
print(a)
将会给出答案
[[1,0],[1,0]]
因此,即使您只想更新第一行第一列的值,同一列中的所有值也会被更新。然而,
a = [[0] * 2 for _ in range(2)]
a[0][0] = 1
print(a)
给出了正确答案
[[1,0],[0,0]]
https://stackoverflow.com/questions/13157961
复制相似问题