gpt4 book ai didi

python - 惯用的 Python : Propagating yields or flattening sequences?

转载 作者:太空狗 更新时间:2023-10-30 00:52:13 25 4
gpt4 key购买 nike

我正在写一个 breadth 深度优先树遍历函数,我想做的是:

def traverse(node):
yield node
for n in node.children:
yield_all traverse(n) # << if Python had a yield_all statement

这个想法是在树中以一个(平坦的)节点序列结束。

方法 #1:(传播 yield )

def traverse(node):
yield node
for n in node.children:
for m in traverse(n):
yield m

方法 #2:(展平序列)

def traverse(node):
return itertools.chain([node],*(traverse(n) for n in node.children))

第一种方法看起来更干净,但我觉得在每个级别显式yield子树中的每个节点很奇怪。

第二种方法简洁且有点脏,但它符合我在 Haskell 中编写的内容:

traverse node = node : concatMap traverse (children node)

所以我的问题是:哪个更好?还是我错过了最佳的第三个选项?

最佳答案

[更新]参见PEP-380 , 此yield all 语法从Python 3.3 开始可用作为 yield from:

def traverse(node):
yield node
for n in node.children:
yield from traverse(n)

关于python - 惯用的 Python : Propagating yields or flattening sequences?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4444564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com