为什么解压会删除对象的内容

谁能向我解释一下,为什么解压缩一个压缩对象 (z1) 会使初始对象 (z1) 为空?


mutants = ['charles xavier', 'bobby drake',

           'kurt wagner', 'max eisenhardt', 'kitty pride']

powers = ['telepathy', 'thermokinesis',

'teleportation', 'magnetokinesis', 'intangibility']


z1 = zip(mutants, powers)


print(*z1)


print(*z1)


MMMHUHU
浏览 185回答 2
2回答

小怪兽爱吃肉

zip 返回一个迭代器,您只能使用一个迭代器一次。如果元素数量很少,您可以使用这些元素创建一个列表或元组,或者您可以使用itertools.tee原始元素创建多个独立的迭代器:import itertoolsz1, z2 = itertools.tee(zip(mutants, powers), 2)print(*z1)print(*z2)结果:('charles xavier', 'telepathy') ('bobby drake', 'thermokinesis') ('kurt wagner', 'teleportation') ('max eisenhardt', 'magnetokinesis') ('小猫的骄傲', '无形')('charles xavier', 'telepathy') ('bobby drake', 'thermokinesis') ('kurt wagner', 'teleportation') ('max eisenhardt', 'magnetokinesis') ('小猫的骄傲', '无形')

侃侃无极

它不会删除它。如果您执行print(z1),您将看到它打印了一个zip 对象。这是因为zip不会创建 atuple或 a list,而是创建迭代器。迭代器是按需生成值的东西。在这种情况下,zip 对象从输入中生成对;即,mutants和powers列表。要查看此操作,在分配之后z1,您可以调用print(next(z1)),这会导致z1生成下一对并打印它;在这种情况下,('charles xavier', 'telepathy')。如果您继续调用next(z1),它将遍历两个列表,直到到达末尾。此时,它没有数据可供读取,因此如果您next(z1)再次尝试调用,它将引发StopIteration异常,这表示可迭代对象已耗尽。相反,如果您执行类似的操作t1 = tuple(z1),则可以根据需要print(*t1)多次调用。但是,如果您这样做然后尝试调用t2 = tuple(z1),您会发现它t2是空的。这与上面的原因相同:building t1fromz1已经耗尽了它,所以当t2试图从 获取值时z1,它立即命中StopIteration并因此生成一个空的tuple。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python