gpt4 book ai didi

python - 在调用函数的列表理解中有效地过滤掉 'None' 项

转载 作者:太空狗 更新时间:2023-10-29 22:10:21 24 4
gpt4 key购买 nike

我有一个列表理解,它调用一个可能返回 None 的函数。

>>> f = lambda x: x if x < 3 else None
>>> l = [f(x) for x in [1,2,3,4]]
[1, 2, None, None]

我想要像上面那样理解列表,但没有“无”条目。

有什么方法可以更有效地执行以下操作,既不会产生额外的开销,又能保持列表理解的效率?

>>> filter(None, [f(x) for x in [1,2,3,4]])
[1, 2]

最佳答案

if 添加到您的理解中,例如:

l = [y for y in (f(x) for x in [1,2,3,4]) if y is not None]

通过放置 Generator Expression在列表理解中,您只需要评估一次函数。此外,生成器表达式是一个生成器,因此不需要额外的中间存储空间。

python 3.8+

从 Python 3.8 开始,您可以使用 Assignment Expression (:=)(又名:命名表达式或海象运算符)以避免对 f() 进行多次求值,例如:

l = [y for x in [1,2,3,4] if (y := f(x)) is not None]

关于python - 在调用函数的列表理解中有效地过滤掉 'None' 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48609891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com