代码之家  ›  专栏  ›  技术社区  ›  Kallz

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

  •  0
  • Kallz  · 技术社区  · 6 年前

    当第二次调用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>
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   hiro protagonist    6 年前

    你给发电机排气 c 你第一次打电话 set .

    其他例子:

    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)
    

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