You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中基于字典生成的zip对象第二次转为列表返回空列表的原因咨询

为什么Python中zip对象第二次转列表会返回空?

嗨,这个问题的根源其实是Python里迭代器的特性,咱们来拆解一下:

首先先看你给出的代码:

l1= {'a':6, 'b':5, 'c':3, 'd':2, 'e':1, 'f':7, 'g':4, 'h':9}
l2={'a':7, 'b':5, 'c':2, 'd':3, 'e':8}
z=zip(l1.values(),l2.values())
print(list(z)) #此处输出正确结果
print(list(z)) #此处返回空列表,原因是什么?

运行后得到的输出是:

[(6, 7), (5, 5), (3, 2), (2, 3), (1, 8)]
[]

原因解析

Python里的zip()函数返回的是一个迭代器(iterator),而迭代器有个关键特性:它只能被遍历一次。

当你第一次调用list(z)时,Python会遍历这个迭代器,把里面所有的元素都取出来转换成列表,这时候迭代器的"指针"已经走到了末尾,没有剩余元素了。当你第二次再调用list(z)时,迭代器已经没有元素可以提供了,自然就返回空列表。

简单说就是:迭代器是"一次性"的,用完就空了,不会保存之前的元素。

解决办法

如果需要多次使用zip后的结果,有两种常用方案:

  1. 提前转换成列表保存
    把zip对象直接转成列表存在变量里,之后直接复用这个列表即可:
l1= {'a':6, 'b':5, 'c':3, 'd':2, 'e':1, 'f':7, 'g':4, 'h':9}
l2={'a':7, 'b':5, 'c':2, 'd':3, 'e':8}
z_result = list(zip(l1.values(), l2.values()))
print(z_result)  # 输出正常结果
print(z_result)  # 再次输出同样内容
  1. 每次需要时重新生成zip对象
    如果原字典的数据没有变化,每次需要的时候重新调用zip()生成新的迭代器:
l1= {'a':6, 'b':5, 'c':3, 'd':2, 'e':1, 'f':7, 'g':4, 'h':9}
l2={'a':7, 'b':5, 'c':2, 'd':3, 'e':8}
print(list(zip(l1.values(), l2.values())))  # 第一次生成并遍历
print(list(zip(l1.values(), l2.values())))  # 重新生成新的zip对象,正常输出

内容的提问来源于stack exchange,提问作者Arpit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:02:28