我有一个列表理解,近似于:
[f(x) for x in l if f(x)]
其中 l 是一个列表,f(x) 是一个返回列表的昂贵函数。
我想避免对 f(x) 的每次非空出现对 f(x) 求值两次。有什么方法可以将其输出保存在列表理解中吗?
我可以删除最终条件,生成整个列表,然后修剪它,但这似乎很浪费。
Edit:
建议采用两种基本方法:
内部生成器理解:
[y for y in (f(x) for x in l) if y]
或记忆。
我认为内部生成器理解对于所述问题来说是优雅的。事实上,我简化了问题以使其清楚,我真的想要:
[g(x, f(x)) for x in l if f(x)]
对于这种更复杂的情况,我认为记忆会产生更清晰的最终结果。
[y for y in (f(x) for x in l) if y]
Will do.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)