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

Python使用列表推导式对列表去重时赋值后得到全None的原因是什么

列表推导式返回全None值的原因

你遇到的现象本质是由Python列表append()方法的返回值特性决定的:

  • Python中所有原地修改容器的方法(比如列表的append()、extend()、sort(),字典的update()等)都没有返回值,默认返回None。这些方法的作用是直接修改调用它的对象本身,不会额外返回处理后的结果。

两种写法的执行逻辑

第一种写法

[unique_lists.append(x) for x in lists if x not in unique_lists]

这里你没有保存列表推导式生成的结果,只是利用了列表推导式遍历过程的副作用来执行append()操作修改unique_lists。此时这个推导式实际生成的就是全None的列表,只是没有赋值给变量被直接丢弃了,你打印的是被修改后的unique_lists,所以得到了正确的去重结果。

第二种写法

g = [unique_lists.append(x) for x in lists if x not in unique_lists]

这里你把列表推导式生成的结果赋值给了g,而推导式每个循环对应的元素就是append(x)的返回值None,所以打印g就会得到全None的列表。但此时unique_lists依然已经被正确修改为去重后的列表,你可以尝试打印unique_lists验证这一点。


补充注意事项

不推荐用列表推导式来执行带副作用的操作,列表推导式的设计初衷是快速生成新列表,这种用法会平白无故生成一个无用的全None列表占用内存。如果只是要循环执行修改操作,直接用普通for循环更符合规范:

unique_lists = []
for x in lists:
    if x not in unique_lists:
        unique_lists.append(x)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:57:01