如何在python中生成多维列表

时间:2017-08-22 06:08:48

标签: python arrays

我尝试根据两个变量生成多维列表:dimdim = 3。它们都是用用户输入初始化的,所以在编码时我不知道它们的值。 size = 2[[['+', '+'], ['+', '+']], [['+', '+'], ['+', '+']]]的示例为:import copy fields = '+' for i in range(dim): fields = [copy.copy(fields) for j in range(size)] 。到目前为止我尝试了什么:

dim in [1, 2]

虽然这对dim > 2完全正常,但只有size = 3才会创建对同一列表的引用。 dim = 3>>> f [[['+', '+', '+'], ['+', '+', '+'], ['+', '+', '+']], [['+', '+', '+'], ['+', '+', '+'], ['+', '+', '+']], [['+', '+', '+'], ['+', '+', '+'], ['+', '+', '+']]] >>> f[0][0][0] = 'X' >>> f [[['X', '+', '+'], ['+', '+', '+'], ['+', '+', '+']], [['X', '+', '+'], ['+', '+', '+'], ['+', '+', '+']], [['X', '+', '+'], ['+', '+', '+'], ['+', '+', '+']]] 的示例:

f = [[['+'] * 3] * 3] * 3

我从copy.copy()这样的代码中了解这种行为,并认为我可以使用<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(document).keyup(function(cfunc) { if (cfunc.keyCode == 83) { alert("S button"); } if (cfunc.keyCode == 84) { alert("T button"); } if (cfunc.keyCode == 67) { alert("C button"); } }); </script> 阻止它,但这显然不起作用。我在Android(QPython 3)上使用Python 3.2.2和在Windows上使用Python 2.7尝试了这个,我得到了相同的结果。请注意,我想要使用像numpy这样的非标准库。

2 个答案:

答案 0 :(得分:2)

您可以使用copy.deepcopy()。 copy.copy()只是浅层复制。

这两种方法之间的区别:

  

浅层复制和深层复制之间的区别仅与复合对象(包含其他对象的对象,如列表或类实例)相关:

     

浅复制构造一个新的复合对象,然后(尽可能)将对它的引用插入到原始对象中找到的对象。

     

深层复制构造一个新的复合对象,然后以递归方式将副本插入到原始对象中找到的对象。

答案 1 :(得分:0)

我会使用numpy数组来提供更方便的切片和索引操作。还允许更多维度而不是2-3和更清晰的代码。

import numpy as np
X = np.empty((width, height), dtype=object)

然后你可以通过你想要的方法填写它,例如:

import itertools
for x, y in itertools.product(range(width), range(height)):
     X[x, y] = '+'