python - 如何在列表理解中按函数返回值执行过滤器?

标签 python list-comprehension

基本逻辑如下:

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/

相关文章:

python - 如何使用 numpy 从另一个具有修改元素的列表中创建列表

python - 加载base64图像时出错: PIL. UnidentifiedImageError : cannot identify image file <_io. BytesIO

python - 类型错误 : __init__() got an unexpected keyword argument 'optimized_write'

python - 是否可以对 celery 定期任务运行单元测试?

python - Numpy 整个矩阵与单行相乘

Python:使用模块 laspy 的列表理解问题

Python for 和 if 在一行

python - 如何制作一个按顺序排列的 n 个列表的列表(以最 pythonic 的方式)?

python - 在 django sql 查询中转义 % 会导致列表超出范围

python - 使用列表理解和两段不同的代码写入文件