You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表推导式如何在条件判断中复用表达式返回值

实现方案

核心需求:遍历可迭代对象调用指定函数,仅当函数返回值不为None时将返回值加入结果列表,需要兼顾代码简洁性,避免函数重复调用产生额外开销和逻辑错误。

方案1:高版本Python首选(3.8+):海象运算符实现

Python 3.8版本新增的海象赋值运算符:=原生支持在表达式内部完成变量赋值,完全匹配你预期的写法逻辑,func仅会执行一次,写法简洁直观:

result = [a for item in items if (a := func(item)) is not None]

方案2:兼容所有Python版本:嵌套单元素迭代写法

如果运行环境低于Python 3.8,可以通过在列表推导式里嵌套一次单元素遍历,把函数返回值绑定到临时变量,全程func仅调用一次,没有额外开销:

result = [a for item in items for a in [func(item)] if a is not None]

方案3:优先保证可读性:普通for循环

如果团队编码规范不推崇偏技巧性的写法,普通for循环是逻辑最直白、几乎没有理解成本的实现,不存在任何性能问题,仅写法稍长:

result = []
for item in items:
    temp = func(item)
    if temp is not None:
        result.append(temp)

避坑提醒

  • 不要使用[func(item) for item in items if func(item) is not None]这种写法:除了重复调用产生不必要的性能损耗外,如果func是带副作用的函数(比如涉及IO操作、修改外部状态、生成随机值等),重复调用会直接产生业务逻辑错误。
  • 不要直接用list(filter(None, map(func, items))):这个写法会把所有假值(0、False、空字符串、空列表等)全部过滤掉,和“仅排除None返回值”的需求不匹配。如果要使用filter+map组合,需要明确判断条件:
    result = list(filter(lambda x: x is not None, map(func, items)))
    

内容的提问来源于stack exchange,提问作者cc-9812398123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:27:41