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

Python集合调用len()报TypeError: NoneType无len()错误的问题

问题原因

set.remove() 和 set.discard() 都是原地修改集合的方法,执行后不会返回新的集合,它们的返回值是 None。你把这个 None 赋值给了 sett_without_val,后续调用 len(sett_without_val) 时,自然会触发 TypeError——因为 None 类型没有长度属性。

修复方案

有两种常用的修复方式,按需选择:

方式一:原地修改后直接返回集合长度

这种方式直接修改原集合,适合不需要保留原集合的场景,用 discard 比 remove 更安全(元素不存在时不会抛出 KeyError):

# 将整数列表转为集合,移除指定值后返回剩余集合的长度
def foo(nums, val):
    sett = set(nums)
    sett.discard(val)
    return len(sett)

print(foo([3,2,2,3],3))  # 输出:1

方式二:生成新集合(不修改原集合)

如果你需要保留原集合,可以用集合的差集操作生成新集合,再返回其长度:

# 将整数列表转为集合,移除指定值后返回剩余集合的长度
def foo(nums, val):
    sett = set(nums)
    sett_without_val = sett - {val}  # 差集操作返回新集合
    return len(sett_without_val)

print(foo([3,2,2,3],3))  # 输出:1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:55:21