在 Python 中使用二维数组

如果你需要使用二维数组,在 Python 中,除了 numpy 这个包之外,最简单的方式就是使用 list 了。你可能认为可以这样构建:

n = 3
m = 4
array = [ [0] * m ] * n
# array
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

但是请你再仔细想一想,这样做真的没有问题吗?
不要忘记了,Python 一切都是对象这个问题,对象肯定存在引用的问题,尤其是可变对象。我们试着来改变其中一个元素:

array[1][0] = 1
# array
 [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]

很不幸,不是我们想象的那样,它改变了多个元素。
来看一看 [ [0] * m ] * n 这个表达式,它首先创建 a = [ [0] * 4],然后构造 array = [a] * 3,这里 array 里面是 a 的 3 个引用。
正确的构造,应该使用列表推导式,而且非常 Pythonic

array = [ [0] * m for i in range(n) ]

你可能感兴趣的:(在 Python 中使用二维数组)