试图创建n * m矩阵

时间:2014-04-23 21:28:24

标签: python python-3.x

尝试创建

董事会(2,3)

导致

[[无,无,无],[无,无,无]]

然而,我只是连续获得6 None,而不是两组之间的休息。

def none_board(n, m):
    a = []
    a += [None]*m 
    b = []
    b += [a*n]
    return b

2 个答案:

答案 0 :(得分:3)

通常,这样做:

def none_board(n, m):
    return [[None for _ in range(m)] 
            for _ in range(n)]

代码

l1 += l2

相当于

l1.extend(l2)

l1.append(l2)

答案 1 :(得分:0)

除了@ jonrsharpe的回答之外,我想说,不要使用*运算符来创建多维列表。当你写a = [None] * 3时,它完全可以并且创建一个3 None的列表。但是当你写b = [a] * 2时,它确实是一个2x3列表,但是2行会引用相同的内存位置,因为a是一个引用,它将被复制到每一行。< / p>

例如:

>>> a = [None] * 3
>>> print a
[None, None, None]
>>> b = [a] * 2
>>> print b
[[None, None, None], [None, None, None]]
>>> a[0] = 0
>>> print a
[0, None, None]
>>> print b
[[0, None, None], [0, None, None]]
>>> b[0][1] = 1
>>> print b
[[0, 1, None], [0, 1, None]]

因此a[0][0]a[1][0]引用相同的位置,更改a中的值会在多个位置更改b,这是意外的。

仅当列表中的项目是基本类型时,才使用*运算符创建列表。