Python 3压缩列表解压缩[重复]

gwbalxhn  于 2023-01-10  发布在  Python
关注(0)|答案(1)|浏览(118)
    • 此问题在此处已有答案**:

Why can't I iterate twice over the same iterator? How can I "reset" the iterator or reuse the data?(6个答案)
七年前就关门了。
我有两个元组的列表mkp1mkp2,我zip并想稍后将它们解包到列表中。但是在第一部分解包之后,剩下的就不见了...为什么?
最小示例:

# list of tuples
mkp1 = [(1, 2), (3, 4), (5, 6)]
mkp2 = [(10, 20), (30, 40), (50, 60)]

# zip this list
pairs = zip(mkp1, mkp2)

# unzip this list
p1 = [kpp[0] for kpp in pairs]
p2 = [kpp[1] for kpp in pairs]
print('p1:', p1)
print('p2:', p2)

编辑:奇怪的是,这在Python 2.7中的工作原理和我预期的一样,但在Python 3.4中却不同。

rta7y2nd

rta7y2nd1#

啊,我找到了answer:在Python 2中,zip返回一个元组列表,而在Python 3中它返回一个迭代器,这导致第二次迭代导致一个空列表。
这是可行的:

# list of tuples
mkp1 = [(1, 2), (3, 4), (5, 6)]
mkp2 = [(10, 20), (30, 40), (50, 60)]

# zip this list
pairs = zip(mkp1, mkp2)

# unzip this list
p1, p2 = [], []
for kpp in pairs:
    p1.append(kpp[0])
    p2.append(kpp[1])

print('p1:', p1)
print('p2:', p2)

相关问题