假設我正在使用遞回生成器來遍歷二叉樹,并且我希望在滿足某個條件時停止遍歷:
def traverse(node):
if node is None:
return
yield from traverse(node.left)
if node.val == 5:
return # return only skips node 5, but doesn't fully stop iteration. What does?
yield node.val
yield from traverse(node.right)
你如何做到這一點?
我嘗試加注StopIteration,但結果是RuntimeException.
uj5u.com熱心網友回復:
將停止和迭代一分為二:
from itertools import takewhile
def traverse(node, stop_value):
yield from takewhile(lambda x: x != stop_value, _traverse(node))
def _traverse(node):
if node is None:
return
yield from traverse(node.left)
yield node.val
yield from traverse(node.left)
uj5u.com熱心網友回復:
您應該控制迭代何時從任何代碼呼叫中停止traverse():
def traverse(node):
if node is None:
return
yield from traverse(node.left)
yield node.val
yield from traverse(node.right)
for n in traverse(node):
if n == 5:
break
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/356393.html
