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

Python中两次打印len(list(nums))结果不同的原因?

问题:Python中连续两次执行print(len(list(nums)))输出2和0的原因是什么?

代码示例:

nums = {1,2,3,4,5,6}
nums = {0,1,2,3} & nums
print(nums)
nums=filter(lambda x: x > 1, nums)
print(nums)
print(len(list(nums)))
print(len(list(nums)))

运行输出:

{1, 2, 3}
<filter object at 0x000001FDFECD2850>
2
0

原因解析:

核心问题出在filter对象是一次性迭代器:

  • 执行nums=filter(lambda x: x > 1, nums)后,nums不再是集合,而是一个filter迭代器。这类迭代器不会提前计算并存储所有结果,只有在被遍历的时候才会逐个生成符合条件的元素(这里是2和3)。
  • 第一次调用list(nums)时,会完整遍历这个迭代器,把所有元素取出组成列表,此时迭代器内部的指针已经走到末尾,没有剩余元素了。
  • 第二次调用list(nums)时,迭代器已经被耗尽,无法再生成任何元素,因此得到空列表,长度为0。

如果想要多次使用过滤后的结果,可以提前把迭代器转成列表保存:

nums = list(filter(lambda x: x > 1, nums))

这样后续无论多少次调用len(nums),结果都会是2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:45:38