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

Python中zip对象循环前后打印结果不同的原因探究

关于zip对象迭代后为空的问题解答

用户代码

users=int(input("enter the number of users whose data you want to enter"))  
List1=[]  
List2=[]  
List3=[]  
username=[]  
copied_list=[] 

for i in range(1,users+1):   
    print(f"Enter first name of user{i}")  
    List1.append(input())  
    print(f"Enter last name of user{i}")  
    List2.append(input())  
    print(f"Enter birth year of user{i}")  
    List3.append(input())  

Full_Details=zip(List1,List2,List3)  
print("Before for loop")  
print(list(Full_Details))  

for i in Full_Details:  
        username.append(i[0][0]+i[1]+i[2][-2:]) 

print("After for loop")  
print(list(Full_Details))  

运行输出

enter the number of users whose data you want to enter2
Enter first name of user1
Harsh
Enter last name of user1
sangwan
Enter birth year of user1
2003
Enter first name of user2
Dev
Enter last name of user2
sharma
Enter birth year of user2
2004
Before for loop
[('Harsh', 'sangwan', '2003'), ('Dev', 'sharma', '2004')]
After for loop
[]

用户疑问

为何循环前将Full_Details转为列表打印能得到正确内容,循环后打印却为空列表?背后的逻辑是什么?


解答

这是因为zip()函数返回的是一个迭代器对象,迭代器的核心特性就是只能被遍历一次。

当你第一次执行list(Full_Details)时,Python会遍历这个迭代器里的所有元素,把它们转换成列表。这个过程会把迭代器里的元素全部"耗尽"——迭代器内部的指针已经走到了末尾,没有剩余元素了。

所以后面的for i in Full_Details循环根本不会执行任何迭代(因为迭代器已经空了),最后再执行list(Full_Details)自然就得到空列表。

两种解决办法

  1. 提前转列表保存:把zip对象直接转换成列表,后续所有操作都基于这个列表(列表支持重复遍历)
# 生成zip对象后直接转成列表存好
Full_Details = list(zip(List1, List2, List3))
print("Before for loop")
print(Full_Details)

for i in Full_Details:
    username.append(i[0][0]+i[1]+i[2][-2:])

print("After for loop")
print(Full_Details)
  1. 按需重新生成zip对象:如果数据量较大想节省内存,可以在每次需要迭代时重新调用zip()生成新的迭代器
Full_Details = zip(List1, List2, List3)
print("Before for loop")
print(list(Full_Details))

# 重新生成zip对象进行遍历
for i in zip(List1, List2, List3):
    username.append(i[0][0]+i[1]+i[2][-2:])

# 再次重新生成zip对象转列表打印
print("After for loop")
print(list(zip(List1, List2, List3)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:32:04