二维零数组

发布于 2021-01-29 17:04:08

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

zeros = [[0 for i in xrange(M)] for j in xrange(M)]

zeros = [[0]*M]*N

zeros一样吗?通过速度和可读性更好地使用哪一个?

关注者
0
被浏览
179
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您应该使用numpy.zeros。如果不是这样,则需要第一个版本。在第二个版本中,如果您更改一个值,则它将在列表中的其他位置更改-例如:

    >>> a = [[0]*10]*10
    >>> a
    [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
    >>> a[0][0] = 1
    >>> a
    [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
    

    这是因为(当您从内而外读取表达式时)创建了一个包含10个零的列表。然后,您创建一个包含10个引用的列表,该列表指向10个零的初始列表。


    注意:

    zeros = [ [0]*M for _ in range(N) ]  # Use xrange if you're still stuck in the python2.x dark ages :).
    

    也可以使用,并且避免了嵌套列表的理解。如果numpy不在桌子上,这就是我要使用的表格。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看