python 我如何使这个函数自动化,它显然有一个模式

owfi6suc  于 2023-03-07  发布在  Python
关注(0)|答案(2)|浏览(126)
def populate_kids(self, arr, used_Indices):
    for a in self.children:
        a.get_all_jumps(arr, used_Indices)

    for a in self.children:
        for b in a.children:
            b.get_all_jumps(arr, used_Indices)

    for a in self.children:
        for b in a.children:
            for c in b.children:
                c.get_all_jumps(arr, used_Indices)

    for a in self.children:
        for b in a.children:
            for c in b.children:
                for d in c.children:
                    d.get_all_jumps(arr, used_Indices)

我如何自动生成此文件
我试过递归了好像不管用

sxpgvts3

sxpgvts31#

这看起来像是BFS(广度优先搜索),所以沿着的方法可能有效:

def populate_kids(self, arr, used_Indices):
    queue = self.children
    while queue:
        next_queue = []
        for a in queue:
            a.get_all_jumps(arr, used_Indices)
            if a.children:
                next_queue.extend(a.children)
        queue = next_queue

其基本思想是,在处理队列时,将下一级别的要搜索项添加到队列中,以便进行下一次迭代。最终,您将到达没有更多级别的点,搜索将结束。
对于DFS(深度优先搜索),递归更容易(我假设self.children中的对象与self具有相同的类型):

def populate_kids(self, arr, used_Indices):
    for a in self.children:
        a.get_all_jumps(arr, used_Indices)
        a.populate_kids(arr, used_Indices)

但是遍历的顺序将有所不同(在完成当前级别的循环之前,您将一直递归到最深的级别)。

sczxawaw

sczxawaw2#

使用递归可自动执行在树状结构中填充数据的函数。通过定义在节点的每个子代上调用自身的递归函数,该函数可以处理任何模式的嵌套子代,从而无需重复的for循环。这样,可以处理节点的所有后代,而无需显式迭代每个级别。

def populate_kids(self, arr, used_Indices):
            for child in self.children:
                self._populate_kids_recursive(child, arr, used_Indices)
        
        def _populate_kids_recursive(self, node, arr, used_Indices):
            node.get_all_jumps(arr, used_Indices)
            for child in node.children:
                self._populate_kids_recursive(child, arr, used_Indices)

相关问题