据我所知,在两种情况下,我们都将拆包3个相同的迭代器,但是输出是不同的。
在第一种情况下,由于某种原因,它类似于list(zip(c[::3], c[1::3], c[2::3]))
,在第二种情况下,其行为类似于普通的zip()
。
c = [[a, b] for a, b in itertools.product(list(range(3)), list(range(3)))]
# first example
list(zip(*[iter(c)] * 3))
>[([0, 0], [0, 1], [0, 2]), ([1, 0], [1, 1], [1, 2]), ([2, 0], [2, 1], [2, 2])]
# second example
list(zip(*[iter(c), iter(c), iter(c)]))
>[([0, 0], [0, 0], [0, 0]),
([0, 1], [0, 1], [0, 1]),
([0, 2], [0, 2], [0, 2]),
([1, 0], [1, 0], [1, 0]),
([1, 1], [1, 1], [1, 1]),
([1, 2], [1, 2], [1, 2]),
([2, 0], [2, 0], [2, 0]),
([2, 1], [2, 1], [2, 1]),
([2, 2], [2, 2], [2, 2])]
答案 0 :(得分:3)
您的第一个示例与
相同it = iter(c)
print(list(zip(*[it, it, it]))) # == list(zip(it, it, it))
这与您创建3个新迭代器的第二个示例list(zip(iter(c), iter(c), iter(c))
不同。
每次next
上调用it
时,都会影响下次使用it
时的情况。
在第二个示例中,这3个迭代器独立运行。