python - Python 使用 List Comprehension 对所有列表元素执行操作并在输出中仅包含一些元素
问题描述
我有以下工作正常的功能:
output = []
for a, b in itertools.product(
list_a, list_b
):
x= perform_action(a,b)
if b.relevant:
output.append(x)
return output
如果可能的话,如何使用列表理解重写它?
简而言之,我正在寻找的是perform_action
所有项目,并且只在输出中包含相关项目。
可重现的例子:
from itertools import product
a = [2,3,4]
b = ["a","b"]
def foo(p,r):
out = "{0}---{1}".format(p,r)
print(out)
return out
li = [foo(p,r) for p,r in product(a,b) if p>3]
print(li)
解决方案
您如何看待两层列表理解?
return [x for b, x in [(b, perform_action(a,b)) for a,b in itertools.product(l_a, l_b)] if b.relevant]
我知道你来这里不是为了代码可读性建议,但是,不要把它变成一个列表理解,它的可读性要差得多。如果您正在考虑内存效率,只需做一个生成器。
推荐阅读
- excel - Excel VBA - 替换非英文字符
- javascript - 随着时间的推移,observable 如何返回多个值
- java - 通过网络浏览器在智能手机上提供 Java 应用程序?
- linq - 从包含最大 DateTime 值的每个组中选择单个元素
- android - Ml Kit 检测不到护照机读区码?
- angular - 更新 .snapshotChanges() 代码以使用 angularfire2 5.0..0 rc-8、firebase 5.0.2
- java - 存储在 SharedPreferences 中的字符串在每个应用程序关闭时都会被修改?
- wordpress - 使用传递登录凭据从 .Net Core 重定向到 Wordpress 页面
- java - java.lang.OutOfMemoryError:即使使用 -Xms1024M -Xmx2048M,也会超出 GC 开销限制
- virtualbox - 与 VirtualBox 和 ReactOS 共享文件夹