3 回答
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 件事与您的代码不同:
您要确保在获得新元素时不会覆盖“元素”变量。相反,我称这些为“child_elements”。
我在函数 loop_through_elements 中添加了对 loop_through_elements 的调用。这称为递归!如果这个概念对你来说是新的,我建议你多读一点,因为这个例子可能不是一个学习递归的超级清晰的地方。
我已经添加了另一个 return 语句,但您应该考虑这个函数现在做什么以及它是否适合您想要它做什么。当您在树的“更深”级别中找到与正则表达式不匹配的元素时会发生什么?如果一切都与正则表达式匹配,您是否保证检查整棵树?如果您完成 for 循环而没有在树中“深入”,您是否应该有一些特殊条件?
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
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(有向无环图),这将永远循环。既然你提到它是一棵树,你应该没问题。
如果您的树太大,这将失败,因为您将耗尽堆栈空间。在这种情况下,您应该尝试使用迭代方法。
添加回答
举报