基本逻辑如下:
result = []
for item in item_lst:
code = foo(item)
if code != -1:
result.append(code)
有了列表理解,我应该写两次:
result = [foo(item) for item in item_lst]
result = [code for code in result if code != -1]
或者
result = [foo(item) for item in item_lst if foo(item) != -1]
这将调用函数 foo 两次。
有没有更好的解决方案?
最佳答案
您可以使用 generator expression避免创建第二个列表:
result = [code for code in (foo(item) for item in item_ls) if code != -1]
这里:
(foo(item) for item in item_ls)
是一个生成器表达式。没有创建中间列表。这可能有助于节省内存。
关于python - 如何在列表理解中按函数返回值执行过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48019102/