我是python的新手并且正在测试解压缩(因为我读它在python 3中不起作用)。但发现这个奇怪的事情:
l1="abcd"
l2="1234"
zipped=zip(l1,l2)
#print(l1,l2,list(zipped))
l1,l2=zip(*zipped)
print(l1,l2)
打印('a', 'b', 'c', 'd') ('1', '2', '3', '4')
但
l1="abcd"
l2="1234"
zipped=zip(l1,l2)
print(l1,l2,list(zipped))
l1,l2=zip(*zipped)
print(l1,l2)
创建错误:Traceback (most recent call last):
File "python", line 5, in <module>
ValueError: not enough values to unpack (expected 2, got 0)
但是我甚至没有改变第5行,也没有重新分配拉链。我能做的就是这个列表有一些奇怪的意想不到的副作用。更有经验的人可以清楚这一点吗?
编辑:我检查了列表是否通过插入额外的print(zipped)
将zip对象转换为列表,但它打印了<zip object at 0x7f993c85af48>
。我现在怀疑它与repl.it有一些关系。
答案 0 :(得分:2)
zip
变成了一个生成器,意味着它不会立即生成一个潜在的巨大结果列表,而是逐个生成。结果是:内存使用量减少。缺点:你通过调用它周围的列表(...)来耗尽你的生成器,因为它消耗了所有生成的元素。因此错误。如果您愿意,将生成的列表传递到下一行。
答案 1 :(得分:0)
list(zipped)
遍历zipped
,因此当您执行l1, l2 = zip(*zipped)
时,zipped
为空,因此您只需执行l1, l2 = zip()
和zip()
当你期望2(l1, l2
)时,返回一个长度为0的空生成器。