在我正在处理的一些代码中,我正在处理生成许多需要组合的单级深度嵌套迭代器。作为一个可行的解决方案,我已经将这些部分中的每一个都封装在了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))).有没有更好的方法,特别是在不解包的情况下生成迭代器并且具有可比的效率(或理想情况下,更好的效率)?
1 回答

莫回无
TA贡献1865条经验 获得超7个赞
您可以只使用以下嵌套:
(j for i in range(5) for j in something_needing_i(i))
为了得到一个平面发电机。这也避免了虚假的中间列表以获得更好的空间效率。
这两个for
结构的顺序一开始可能看起来违反直觉,因为与创建嵌套生成器/列表的顺序相比,您必须改变它们。此外,它们的范围不符合我的自然语言“感觉”,但这就是它们的工作方式。
添加回答
举报
0/150
提交
取消