Python中的递归生成器

2024-06-04 22:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个函数来返回一个生成器,该生成器包含给定长度的子字符串的每个唯一组合,这些子字符串包含来自主字符串的n个以上的元素。在

举例来说:

如果我有'abcdefghi'和一个长度为2的探针,并且每个列表的阈值为4个元素,我希望得到:

['ab', 'cd', 'ef', 'gh']
['ab', 'de', 'fg', 'hi']
['bc', 'de', 'fg', 'hi']

我对这个问题的第一次尝试是返回一个列表列表。结果计算机内存溢出了。作为一个粗略的二次解决方案,我创建了一个执行类似操作的生成器。问题是我创建了一个嵌套的生成器来调用它自己。当我运行这个函数时,它似乎只是在内部for循环中循环,而实际上没有再次调用它自己。我认为生成器会在递归洞的最前面,直到到达yield语句为止。有什么线索吗?在

^{pr2}$

如果把产量改为印刷,这个工作很好!我希望能得到任何帮助。我意识到这并不是这类搜索问题的最佳实现,它看起来像是从上一次get_next_probe调用中返回找到的位置列表,并过滤此列表中不与new_last重叠的元素_探针端部会更有效率。。。但这对我来说写起来容易多了。任何算法的输入仍然是值得赞赏的。在

谢谢!在


Tags: 函数字符串元素列表abcdde阈值
1条回答
网友
1楼 · 发布于 2024-06-04 22:26:30

I thought that a generator would precede as far down the recursion hole as necessary until it hit the yield statement

它可以很好地递归,但是要想让yielded值向外传播,您需要显式地执行它—就像它是return一样,您需要显式地return每次递归的结果。所以,不是:

 self.get_next_probe(new_list, probes, unit_length)

你可以做一些类似的事情:

^{pr2}$

或者,如果您使用的是Python 3.3或更新版本,也可以执行以下操作:

yield from self.get_next_probe(new_list, probes, unit_length)

相关问题 更多 >