首页 > 解决方案 > 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)

标签: pythonlist-comprehension

解决方案


您如何看待两层列表理解?

return [x for  b, x in [(b, perform_action(a,b)) for a,b in itertools.product(l_a, l_b)] if b.relevant]

我知道你来这里不是为了代码可读性建议,但是,不要把它变成一个列表理解,它的可读性要差得多。如果您正在考虑内存效率,只需做一个生成器。


推荐阅读