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

为何itertools.permutations迭代器转列表取长度后会耗尽?

问题:为什么itertools.permutations对象转成列表取长度后会被耗尽?

案例1:itertools.permutations的情况

执行以下代码:

import itertools as itt
perm_set = itt.permutations('ABC')
iter1 = len(list(perm_set))
iter2 = len(list(perm_set))
print(iter1,iter2)

结果会输出 6 0,第3行执行后perm_set的数据被耗尽,导致iter1≠iter2。

案例2:普通列表的情况

执行以下代码:

l = [1,2,3,4,5]
iter1 = len(list(l))
iter2 = len(list(l))
print(iter1,iter2)

结果会输出 5 5,两次取长度的结果完全一致。

原因解析

  • itt.permutations('ABC')返回的是迭代器(iterator),迭代器的核心特性是只能被遍历一次:当你用list(perm_set)遍历它时,会一次性取出所有元素生成列表,此时迭代器内部的"指针"已经走到末尾,没有剩余元素可生成。第二次调用list(perm_set)时,迭代器已经耗尽,只能得到空列表,长度自然为0。
  • 普通列表属于可迭代对象(iterable),但不是迭代器。每次调用list(l)时,都会重新从列表的起始位置遍历所有元素,生成一个新的列表,完全不会改变原列表的状态,所以两次取长度的结果完全相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:32:14