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

如何移除生成器中的None值?使用赋值表达式尝试失败

解决生成器过滤None值的问题

你写的代码没结果是因为生成器的执行顺序搞反了——if a的判断逻辑在a:=i.get("x")之前就运行了,这时候a要么是之前的旧值,要么根本没被当前循环的元素赋值,自然过滤掉了所有结果。

正确的做法是把赋值和判断合并到过滤条件里,让程序先赋值再判断:

(a for i in l if (a := i.get("x")) is not None)

这里要注意:如果你的场景里需要保留0、空字符串""这类假值,只过滤None,就必须用is not None做判断;要是你想过滤所有假值(包括0、""、[]等),可以简化成:

(a for i in l if (a := i.get("x")))

举个实际例子验证:
假设l = [{"x": 1}, {"x": None}, {"y": 2}, {"x": ""}, {"x": 0}]

  • 第一种写法(仅过滤None)会得到1, "", 0
  • 第二种写法(过滤所有假值)会得到1

内容的提问来源于stack exchange,提问作者Baz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:01