猿问

Python 深入遍历数组。树

需要有关循环的建议。


我有一个元素数组。


我需要遍历数组并检查每个元素的正则表达式。如果元素与正则表达式匹配,我将调用一个函数,该函数返回新的元素数组。然后,在继续迭代之前,我应该循环遍历这个新元素数组,执行相同的过程。这就像树中的深度优先搜索。


似乎我需要使用“while”循环,但我无法弄清楚逻辑。


例如:


def get_elements(element):

   #some code

   return elements


def loop_through_elements(elements):

    for element in elements:

       if re.search("myRegExp", element):

          elements = get_elements(element);

       else:

          return element


侃侃尔雅
浏览 186回答 3
3回答

慕虎7371278

如果你想对你的元素进行深度优先迭代,你可以考虑这样的逻辑:def loop_through_elements(elements):     for element in elements:        if re.search("myRegExp", element):           child_elements = get_elements(element)           return loop_through_elements(child_elements)                  else:                     return element有 3 件事与您的代码不同:您要确保在获得新元素时不会覆盖“元素”变量。相反,我称这些为“child_elements”。我在函数 loop_through_elements 中添加了对 loop_through_elements 的调用。这称为递归!如果这个概念对你来说是新的,我建议你多读一点,因为这个例子可能不是一个学习递归的超级清晰的地方。我已经添加了另一个 return 语句,但您应该考虑这个函数现在做什么以及它是否适合您想要它做什么。当您在树的“更深”级别中找到与正则表达式不匹配的元素时会发生什么?如果一切都与正则表达式匹配,您是否保证检查整棵树?如果您完成 for 循环而没有在树中“深入”,您是否应该有一些特殊条件?

白猪掌柜的

您可以尝试使用递归函数并在其定义中调用“loop_through_elements(elements)”。def loop_through_elements(elements):    for element in elements:        if re.search("myRegExp", element):            loop_through_elements(get_elements(element))        else:            return element

缥缈止盈

如果我们假设每个元素是字符串或可交互类型(例如列表),我们可以使用递归解决这个问题:def examine_element(element):    """ Examine a single element    """    if re.search("myREgExp", element):        pass # TODOdef examine_each_element(elements):    """ Examine all elements recursively    """    for element in elements:        if isinstance(str, element):            # This element is a single element            examine_element(element)        else:            # This element represents multiple elements            examine_each_element(elements)请注意,这种方法有一些限制,您应该注意:如果您的结构不是 DAG(有向无环图),这将永远循环。既然你提到它是一棵树,你应该没问题。如果您的树太大,这将失败,因为您将耗尽堆栈空间。在这种情况下,您应该尝试使用迭代方法。
随时随地看视频慕课网APP

相关分类

Python
我要回答