【问题标题】:creating "data tree" paths recursively iterating over nested lists in python在python中递归迭代嵌套列表创建“数据树”路径
【发布时间】:2014-12-04 04:54:59
【问题描述】:

我正在尝试为 _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]。

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

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

【问题讨论】:

  • 我怀疑没有人仍然理解您的问题描述。如果您仍然需要答案,能否请您尝试更清楚或发布一个来源的链接?
  • 我不确定正确的术语是什么,但它就像“为嵌套列表编制索引”,但它不仅仅注意项目的深度,而是为每个列表/子列表创建一个带有数字的列表。我再举一个例子。此外,图像链接很好地描述了数据树路径是什么。
  • 您链接中的“Grasshopper”是否引用了“Grasshopper ALGORITHMIC MODELING FOR RHINO”?如果我是正确的,是否有可能在您的标签中添加标签“犀牛”真的很有帮助?
  • 进一步看,我发现还有一个明确的grasshopper 标签,您可能想添加...也就是说,我将您的问题留给犀牛和蚱蜢的专家 ciao
  • 我不认为这是一个蚱蜢/犀牛问题。我正在寻求帮助创建一种方法,该方法将检查列表/嵌套列表,同时跟踪每个项目的列表深度/索引号,以便稍后可以用新列表替换该项目。

标签: python list nested-lists grasshopper


【解决方案1】:

您可以尝试为一般树创建一个类,并将各种分支作为根对象的子对象。假设根对象的值可以是 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:本可以对此发表评论,但没有足够的声誉这样做,因此这是一个幼稚的答案。很抱歉。

【讨论】:

  • 感谢您查看此内容。我不知道从哪里开始,所以这很棒。我会看看那个,看看我能不能想出点什么……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 2020-10-20
相关资源
最近更新 更多