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

Python列表推导式中避免transform函数重复执行的方法

解决transform函数重复执行的列表推导式优化方案

针对这个问题,有两种简洁的方法可以在列表推导式中避免重复调用高成本的transform函数:

方法1:用生成器表达式预计算转换结果

先通过生成器表达式一次性算出每个元素的转换值,再对结果进行过滤,这样每个元素只会调用一次transform:

def transform(n):
    # expensive irl, so don't execute twice
    return None if n == 2 else n**2


a = [1, 2, 3]
lst = [t for t in (transform(n) for n in a) if t is not None]

print(lst)  # 输出 [1, 9]

这里的(transform(n) for n in a)是一个生成器,会逐个计算每个元素的转换结果,后续的列表推导式直接使用这些预计算好的t,不会重复调用函数。

方法2:使用海象运算符(Python 3.8+)

Python 3.8引入的海象运算符:=可以在表达式内部完成赋值操作,直接在列表推导式的条件里完成转换和赋值,确保每个元素只调用一次函数:

def transform(n):
    return None if n == 2 else n**2


a = [1, 2, 3]
lst = [t for n in a if (t := transform(n)) is not None]

print(lst)  # 输出 [1, 9]

这个写法更紧凑,t := transform(n)会先执行转换并把结果赋值给t,紧接着判断t是否不为None,符合条件就把t加入列表。

内容的提问来源于stack exchange,提问作者Nico Schlömer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:50:35