在下面的代码中,我需要testzip()
方法。在一个例子中,我在b(zip输出)中迭代,第二次将b转换为set,但当我将b转换为set时,发生了一件奇怪的事情。在b中迭代的,打印它输出的是空列表。但是当我注释c = set(b)
和print(c)
时,输出是正确的发生了什么,为什么?你能给我解释一下吗
l1 = range(10)
l2 = range(10)
b = zip(l1,l2)
c = set(b)
print(c)
result = [(x,y) for x,y in b]
print(len(result))
Tags:
zip
是一个迭代器,您已经用尽了它根据documentation,
zip
等价于下面的生成器函数(注意yield
语句):你可以用许多方法把发电机排气。例如,对它调用
list
或set
,或应用next
直到它排气因为您已经在生成器上调用了
set
,所以它的内容将被清空并且不再是iterable,除非它们是通过exhating函数存储的您可以在exhausted iterators - what to do about them?中找到一些示例和解决方案。特别是,
itertools.tee
可以方便地复制迭代器,以便您可以“重用”它相关问题 更多 >
编程相关推荐