Python中为何两个for循环里item1的取值层级存在差异?
为什么Python循环中同一个变量名item1的取值层级不同?
先明确你的代码生成的lst是什么:它是通过zip(lst1, lst2)生成的二元元组的列表,每个元素都是类似(x, y)这样的元组(x取自lst1,y取自lst2)。接下来拆解两个循环的差异:
Section 1:遍历完整元组
for item1 in lst: print(item1)
这里的逻辑是直接遍历lst中的每一个元素——而lst的每个元素本身就是一个完整的元组,所以item1拿到的是整个元组对象,输出结果会是(12, 45)、(78, 32)这类形式。
Section 2:元组解包遍历
for item1, item2 in lst: print(item1, item2)
这里用到了Python非常实用的元组解包特性:当你在循环头部写item1, item2时,Python会自动把lst中的每个元组元素“拆解”开,将元组的第一个元素赋值给item1,第二个元素赋值给item2。
举个单独的小例子帮你理解解包:
sample_tuple = (50, 60) a, b = sample_tuple # 此时a=50,b=60
循环里的逻辑和这个完全一致,每次迭代都会把当前元组的两个元素分别分配给item1和item2,所以这里的item1是元组里的第一个数值,而非整个元组。
顺带提一句:如果元组的元素数量和你声明的变量数量不匹配,Python会直接抛出ValueError,比如写a, b, c = (10,20)就会报错,这也能侧面验证解包是严格对应元素数量的。
内容的提问来源于stack exchange,提问作者Weijianzhong
相关产品推荐
相关产品推荐

