为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻阅古今 2021-07-22 16:02:50
在我正在处理的一些代码中,我正在处理生成许多需要组合的单级深度嵌套迭代器。作为一个可行的解决方案,我已经将这些部分中的每一个都封装在了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结构的顺序一开始可能看起来违反直觉,因为与创建嵌套生成器/列表的顺序相比,您必须改变它们。此外,它们的范围不符合我的自然语言“感觉”,但这就是它们的工作方式。


查看完整回答
反对 回复 2021-07-28
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号