首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >二维零数组

二维零数组
EN

Stack Overflow用户
提问于 2012-10-31 20:27:58
回答 3查看 91.9K关注 0票数 51

python中没有数组类型,但为了模拟它,我们可以使用列表。我想要用零填充二维类似数组的结构。我的问题是:这两个表达式有什么区别:

代码语言:javascript
复制
zeros = [[0 for i in xrange(M)] for j in xrange(M)]

代码语言:javascript
复制
zeros = [[0]*M]*N

zeros会是一样的吗?在速度和可读性方面,哪一个更好?

EN

回答 3

Stack Overflow用户

发布于 2016-08-20 09:48:07

对于Python 3(不再有xrange),首选答案

代码语言:javascript
复制
zeros = [ [0] * N for _ in range(M)]

对于M x N个零数组

票数 38
EN

Stack Overflow用户

发布于 2012-10-31 20:39:22

在第二种情况下,您创建了一个指向同一列表的引用列表。如果你有像这样的代码:

代码语言:javascript
复制
[lst] * N

其中lst是对列表的引用,您将看到以下列表:

代码语言:javascript
复制
[lst, lst, lst, lst, ..., lst]

但由于结果列表包含对同一对象的引用,因此如果您更改一行中的值,则该值将在所有其他行中更改。

票数 21
EN

Stack Overflow用户

发布于 2021-09-17 04:27:09

哲虎的答案是更安全的,应该是最好的答案。这是因为如果我们使用接受答案方法

代码语言:javascript
复制
a = [[0] * 2] * 2
a[0][0] = 1
print(a)

将会给出答案

代码语言:javascript
复制
[[1,0],[1,0]]

因此,即使您只想更新第一行第一列的值,同一列中的所有值也会被更新。然而,

代码语言:javascript
复制
a = [[0] * 2 for _ in range(2)]
a[0][0] = 1
print(a)

给出了正确答案

代码语言:javascript
复制
[[1,0],[0,0]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13157961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档