避免生成嵌套迭代器然后立即解包

在我正在处理的一些代码中,我正在处理生成许多需要组合的单级深度嵌套迭代器。作为一个可行的解决方案,我已经将这些部分中的每一个都封装在了chain(*(one_level_nested))其中chain(来自广受欢迎的itertools模块)。然而,多次重复这个表达让我觉得这个表达很丑陋,可能会被误导;

作为一级深度生成代码的一个例子,它们中的大多数都是按以下方式构建的:[j for j in something_needing_i(i)] for i in range(5)因此我最终得到chain(*([j for j in something_needing_i(i)] for i in range(5))).

有没有更好的方法,特别是在不解包的情况下生成迭代器并且具有可比的效率(或理想情况下,更好的效率)?


翻阅古今
浏览 165回答 1
1回答

莫回无

您可以只使用以下嵌套:(j for i in range(5) for j in something_needing_i(i))为了得到一个平面发电机。这也避免了虚假的中间列表以获得更好的空间效率。这两个for结构的顺序一开始可能看起来违反直觉,因为与创建嵌套生成器/列表的顺序相比,您必须改变它们。此外,它们的范围不符合我的自然语言“感觉”,但这就是它们的工作方式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python