2014-12-04 84 views
0

我想创建一个列表中的每个项目的“路径”。例如输入列表:创建“数据树”路径递归迭代Python中的嵌套列表

_list = [[x,x,x], [[x,x,x],[x,x,x]], [x,x,x]] 

期望的输出:

_list = [\ 
     [[0,0,0],[0,0,0],[0,0,0]], \ 
     [[[0,1,0],[0,1,0],[0,1,0]],[[0,1,1],[0,1,1],[0,1,1]]] \ 
     [[0,2,0], [0,2,0], [0,2,0]]] 

的想法是,我建立到一个类似的数据树中的路径:

http://studiomaven.org/images/2/2c/Grasshopper_Data_Tree.png

其中第一那么由于_list在其中有三个(3)列表,所以第一个二级分支是[0,0] [0,1]和[0,2],那么因为[0,1]分支还有一个列表在它又是另一个在第一个分支中的所有项都是[0,0,0],第二个分别是[0,1,0]和[0,1,1]的情况下,因为该分支中有两个列表,并且最终分支是[0,2,0]。

实施例2:输入:

_list = [x,x,x,x] 

输出:

_list = [[0],[0],[0],[0]] 

说明: 自单个深度列表中的所有的信息驻留在第一[0]的分支。每个项目x的路径[0]

实施例3: 输入:

_list = [[x,x,x],[x,x,x]] 

输出:

_list = [[[0,0],[0,0],[0,0]],[[0,1],[0,1],[0,1]]] 

说明: _List包含两个列表,以便第一支路0具有两个更多的分支在上面。在这种情况下,该级别的两个分支上的所有项目都是[0,0],第二个分支上的是[0,1]。

这可以以某种方式递归地完成,这种方式可以处理列表列表的任何深度/复杂度?

我明白,这不是一个错误/问题,但我有点noob和递归函数仍然是一个谜。任何帮助都感激不尽。即使是简单的伪代码让我开始。 谢谢,

+2

我怀疑没有人仍然能够理解你的问题描述。如果你仍然需要一个答案,你可以请尝试更清楚或发布链接到源? – gboffi 2014-12-04 15:09:59

+0

我不确定什么是适当的术语,但它像“索引嵌套列表”,而不是只记录项目的深度,它会为每个列表/子列表创建一个包含数字的列表。我会举另一个例子。此外,图像链接是数据树路径的一个很好的描述。 – konrad 2014-12-04 15:16:48

+0

您的链接中的“蚱蜢”是否参考了_“Grasshopper 犀牛算法模型”_?如果我是正确的,是否有可能为你的标签添加标签'rhino'可以真正帮助你? – gboffi 2014-12-04 15:45:39

回答

0

您可以尝试为一般树创建一个类,并将各分支作为根对象的子项。假设根对象可以是0值,那么最左边的子元素的值是[0,0],值为[0,1]的下一个子元素等等。如果孩子是一个嵌套列表,那么你可以创建一个方法来让更多的孩子离开它,并将它们作为父代添加到初始节点。 您可以初始化类为这样的事情,并可以相应地工作,

class GrassTree(): 

    def __init__(self, lst): 
     self.key = "0" 
     self.child = [] 
     for i in lst: 
      self.child.append(i) 

    def getChild(self): 
     for i in range(0, len(self.child)): 
      print(self.child[i]) 

这只是一个骨骼的事情,我已经开始为了解决这个问题,一起工作的想法。将进一步工作。就递归而言,当试图实现插入子类的类时,它会出现。

PS:可能只是给出了一个评论,但没有足够的声望来这样做,因此这样一个幼稚的答案。对不起。

+0

感谢您关注此事。我不知道从哪里开始,所以这很棒。我会看看,看看我能不能拿出一些东西...... – konrad 2014-12-04 17:49:42