Creating a 2d matrix in python
我创建了一个6x52d数组,最初每个单元格中都没有。然后我读了一个文件,在我读的时候用数据替换它们。我首先创建空数组,因为我正在读取的文件中的数据顺序未定义。我的第一次尝试是:
1 | x = [[None]*5]*6 |
这导致了一些我现在理解的奇怪错误,因为列表上的*操作符可能创建引用而不是副本。
是否有一个简单的一行程序来创建这个空数组?我可以为循环做一些并构建它,但对于Python来说,这似乎是不必要的冗长。
使用嵌套的理解列表:
1 | x = [[None for _ in range(5)] for _ in range(6)] |
这是怎么回事?
1 | x = [[None]*5]*6 |
号
扩展到
1 | x = [[None, None, None, None, None, None]]*6 |
此时,您有一个列表,其中有6个不同的引用单体
1 | x = [[None]*5 for _ in range(6)] |
。
这避免了对任何列表的重复引用,并且尽可能简洁明了,我相信这是可读的。
如果你不走麻木的路线,你可以用字典来伪造二维数组:
1 2 3 | >>> x = dict( ((i,j),None) for i in range(5) for j in range(6) ) >>> print x[3,4] None |