python:第二次在Itertools产品对象上调用set清除数据[重复]

wkyowqbh  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(97)
    • 此问题在此处已有答案**:

Why can't I iterate twice over the same iterator? How can I "reset" the iterator or reuse the data?(5个答案)
四年前关闭了。
第二次调用set(c)时,显示空集,清除数据,但第一次运行正常,对象地址也相同。

>>> import itertools
>>> a = ["aaa", "bbb", "ccc"]
>>> b = [True, False]
>>> c = itertools.product(a, b)
>>> c
<itertools.product object at 0x7f7bbca23050>
>>> set(c)
set([('bbb', True), ('ccc', True), ('ccc', False), ('aaa', True), ('bbb', False), ('aaa', False)])
>>> set(c)
set([])
>>> c
<itertools.product object at 0x7f7bbca23050>
0s7z1bwu

0s7z1bwu1#

在第一次调用set时耗尽生成器c
其他示例:

import itertools
a = ["aaa", "bbb", "ccc"]
b = [True, False]
c = itertools.product(a, b)

for item in c:
    print(item) 
for item in c:
    print(item)

第二个循环将不打印任何内容。
如果你需要在同一个迭代器上迭代两次,你可以使用itertools.tee

from itertools import tee

c1, c2 = tee(c)

现在你有两个独立的迭代器。

相关问题