避免生成嵌套的迭代器,然后立即解压缩它们

时间:2018-10-24 04:18:41

标签: python python-3.x

在我正在处理的一些代码中,我正在处理生成许多需要组合的单层深度嵌套迭代器。作为一个可行的解决方案,我将所有这些部分都包装在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 个答案:

答案 0 :(得分:3)

您可以仅使用以下嵌套:

(j for i in range(5) for j in something_needing_i(i))

以获取平板发电机。这也避免了虚假的中间列表,从而提高了空间效率。

两个for构造的顺序乍看起来似乎违反直觉,因为与创建嵌套生成器/列表的构造相比,您必须将它们转过来。另外,他们的范围与我的自然语言“感觉”不符,但这就是他们的工作方式。