我正在尝试一种四叉树类型的东西,但是应该在任意数量的维度上工作,并且我将值存储在列表中,其中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
变量,因此'为什么我得到不同的结果。