在我正在编写的 Python 程序中,我使用字典构建了一个链表,该字典将每个节点映射到其后继节点(最后一个节点映射为 None)。
(实际上,字典包含 Wikipedia 告诉我的称为spaghetti stack的东西,它是一棵树,其中每个节点都链接到其父节点而不是其子节点。这意味着从叶节点到根节点有许多部分重叠的路径.我只关心其中一个路径,从特定的叶节点开始。这对于这个问题并不重要,除了排除任何涉及迭代字典中所有元素的解决方案。)
我需要将此列表作为可迭代对象传递给另一个函数。我知道我可以使用生成器函数(见下面的代码)来做到这一点,但似乎应该有一个内置函数来使我需要的迭代器在一行中(或者可能是一个生成器表达式)。我已经对文档进行了一些搜索,但是 itertools 或 functools 模块中似乎没有任何内容适用,而且我不确定在哪里可以查看。
这是我现在拥有的生成器功能。可以消除外部函数(内联),但内部生成器似乎是使数据可迭代的唯一简单方法:
def makeListGenerator(nextDict, start):
def gen(node):
while node:
yield node
node = nextDict[node]
return gen(start)
这种生成器似乎应该有一个模式,但我不确定它会被称为什么。这是一个通用版本:
def makeGenericGenerator(nextFunc, continueFunc, start):
def gen(value):
while continueFunc(value):
yield value
value = nextFunc(value)
return gen(start)
我可以使用这个调用来实现特定版本:
makeGenericGenerator(lambda v: nextDict[v], bool, start)
Python标准库中是否已经存在类似的东西?