在python中创建一个2d矩阵

时间:2010-11-19 22:37:27

标签: python list

我创建了一个6x5 2d数组,最初在每个单元格中只有None。然后,当我读取它时,我读取了一个文件并用数据替换了Nones。我首先创建空数组,因为我正在读取的文件中的数据是未定义的顺序。我第一次尝试这样做:

x = [[None]*5]*6

导致了一些我现在理解的奇怪错误,因为列表上的*运算符可能会创建引用而不是副本。

是否有一个简单的衬垫来创建这个空阵列?我可以做一些for循环并构建它,但对于python来说这似乎是不必要的冗长。

3 个答案:

答案 0 :(得分:30)

使用嵌套的理解列表:

x = [[None for _ in range(5)] for _ in range(6)]

答案 1 :(得分:19)

这里发生的是

x = [[None]*5]*6

扩展为

x = [[None, None, None, None, None, None]]*6

此时,您有一个列表,其中包含对单身None的6个不同引用。您还有一个列表,其中包含对内部列表的引用,因为它是第一个也是唯一的条目。当你将它乘以6时,你会得到5个对内部列表的引用。但重点是内部列表没有问题,只有外部列表,因此不需要将内部列表的构建扩展为理解。

x = [[None]*5 for _ in range(6)] 

这样可以避免重复对任何列表的引用,并且简洁,因为它可以让我相信。

答案 2 :(得分:1)

如果你没有走numpy路线,你可以伪造带有字典的2D数组:

>>> x = dict( ((i,j),None) for i in range(5) for j in range(6) )
>>> print x[3,4]
None
相关问题