0

我正在尝试为_list 中的每个项目创建一个“路径”列表。例如输入列表:

_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

其中第一个分支是 0。那么由于 _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]。

这可以以某种方式递归地完成,这将适用于列表列表的任何深度/复杂性吗?

我知道这不是错误/问题,但我有点菜鸟,递归函数对我来说仍然是个谜。任何帮助都感激不尽。即使是简单的伪代码也能让我开始。谢谢你,

4

1 回答 1

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:本可以对此发表评论,但没有足够的声誉这样做,因此这是一个幼稚的答案。对此感到抱歉。

于 2014-12-04T17:36:39.463 回答