为了账号安全,请及时绑定邮箱和手机立即绑定

Python 深入遍历数组。树

Python 深入遍历数组。树

侃侃尔雅 2021-09-01 19:17:41
需要有关循环的建议。我有一个元素数组。我需要遍历数组并检查每个元素的正则表达式。如果元素与正则表达式匹配,我将调用一个函数,该函数返回新的元素数组。然后,在继续迭代之前,我应该循环遍历这个新元素数组,执行相同的过程。这就像树中的深度优先搜索。似乎我需要使用“while”循环,但我无法弄清楚逻辑。例如:def get_elements(element):   #some code   return elementsdef loop_through_elements(elements):    for element in elements:       if re.search("myRegExp", element):          elements = get_elements(element);       else:          return element
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

如果你想对你的元素进行深度优先迭代,你可以考虑这样的逻辑:

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 件事与您的代码不同:

  1. 您要确保在获得新元素时不会覆盖“元素”变量。相反,我称这些为“child_elements”。

  2. 我在函数 loop_through_elements 中添加了对 loop_through_elements 的调用。这称为递归!如果这个概念对你来说是新的,我建议你多读一点,因为这个例子可能不是一个学习递归的超级清晰的地方。

  3. 我已经添加了另一个 return 语句,您应该考虑这个函数现在做什么以及它是否适合您想要它做什么。当您在树的“更深”级别中找到与正则表达式不匹配的元素时会发生什么?如果一切都与正则表达式匹配,您是否保证检查整棵树?如果您完成 for 循环而没有在树中“深入”,您是否应该有一些特殊条件?


查看完整回答
反对 回复 2021-09-01
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

您可以尝试使用递归函数并在其定义中调用“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


查看完整回答
反对 回复 2021-09-01
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

如果我们假设每个元素是字符串或可交互类型(例如列表),我们可以使用递归解决这个问题:


def examine_element(element):

    """ Examine a single element

    """

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

        pass # TODO


def 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(有向无环图),这将永远循环。既然你提到它是一棵树,你应该没问题。

如果您的树太大,这将失败,因为您将耗尽堆栈空间。在这种情况下,您应该尝试使用迭代方法。


查看完整回答
反对 回复 2021-09-01
  • 3 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信