3 回答

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊
如果你想對你的元素進(jìn)行深度優(yōu)先迭代,你可以考慮這樣的邏輯:
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”。
我在函數(shù) loop_through_elements 中添加了對 loop_through_elements 的調(diào)用。這稱為遞歸!如果這個概念對你來說是新的,我建議你多讀一點,因為這個例子可能不是一個學(xué)習(xí)遞歸的超級清晰的地方。
我已經(jīng)添加了另一個 return 語句,但您應(yīng)該考慮這個函數(shù)現(xiàn)在做什么以及它是否適合您想要它做什么。當(dāng)您在樹的“更深”級別中找到與正則表達(dá)式不匹配的元素時會發(fā)生什么?如果一切都與正則表達(dá)式匹配,您是否保證檢查整棵樹?如果您完成 for 循環(huán)而沒有在樹中“深入”,您是否應(yīng)該有一些特殊條件?

TA貢獻(xiàn)1893條經(jīng)驗 獲得超10個贊
您可以嘗試使用遞歸函數(shù)并在其定義中調(diào)用“l(fā)oop_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貢獻(xiàn)2041條經(jīng)驗 獲得超4個贊
如果我們假設(shè)每個元素是字符串或可交互類型(例如列表),我們可以使用遞歸解決這個問題:
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)
請注意,這種方法有一些限制,您應(yīng)該注意:
如果您的結(jié)構(gòu)不是 DAG(有向無環(huán)圖),這將永遠(yuǎn)循環(huán)。既然你提到它是一棵樹,你應(yīng)該沒問題。
如果您的樹太大,這將失敗,因為您將耗盡堆??臻g。在這種情況下,您應(yīng)該嘗試使用迭代方法。
添加回答
舉報