是否可以使用包含空列表的列表作为模板而不使用深度复制?

时间:2016-01-27 16:51:30

标签: python

我正在尝试一种四叉树类型的东西,但是应该在任意数量的维度上工作,并且我将值存储在列表中,其中l[-1]是该段中的ID,以及其他部分是细分市场。

我现在只是让它在2D工作,其中有4个可能的正方形,相当于:

#paths is similar to [(1, 1), (1, -1), (-1, 1), (-1, -1)]
branch = [[] for i in paths] + [[]]
#or
branch = [[]] * (len(paths) + 1)

#both of which are
[[], [], [], [], []]

但是,除非我特意键入[[], [], [], [], []],否则其他列出所有链接并产生不正确的结果。从字面上看,我发现的唯一方法似乎是使用copy.deepcopy,但对于这样一个简单的问题,会有更好或更有效的方法吗?

编辑:

我失去了今天早上所做的所有事情,因为我从未关闭Maya而我的电脑最终崩溃了,所以我无法复制实际的代码,但我意识到现在我做错了。考虑到这一点,我猜测我可以存储range(len(paths) + 1)一次,然后只使用[[] for i in path_range]来创建每个列表而不需要太多额外的处理,尽管我想我喜欢只定义它的想法'分支'一次并重复使用。

以下是我原本试图用更简单的形式做的事情(我认为)的基本概念,我正在处理一个数字列表,这些数字决定了它的递归路径如果它没有存在,我会构建新的列表(在这种情况下,递归分支只是[0]

#branch = any of those things mentioned above
tree = list(branch)
tree[0] = list(branch)
tree[0][-1].append(5)

我并没有想到[[], [], [], [], []][[] for i in paths] + [[]]相同,我实际上替换了branch变量,因此'为什么我得到不同的结果。

0 个答案:

没有答案