Python循环解包元组后a+b+c输出21的原因咨询
代码输出21的执行逻辑
你运行的代码如下:
my_list= [(0,1,2),(3,4,5),(6,7,8)] for a,b,c in my_list: print(a) print(b) print(c) my_list = a+b+c print(my_list)
逐行执行的逻辑如下:
- 第一行给变量
my_list初始赋值为包含3个三元组的列表,元素依次是(0,1,2)、(3,4,5)、(6,7,8) - 接下来进入
for循环,这里用了元组解包语法:每遍历到列表中的一个三元组,就会把元组内的三个元素按顺序赋值给a、b、c三个变量,之后执行三次打印操作:- 第一次遍历到
(0,1,2):a=0、b=1、c=2,依次打印0、1、2 - 第二次遍历到
(3,4,5):a=3、b=4、c=5,依次打印3、4、5 - 第三次遍历到
(6,7,8):a=6、b=7、c=8,依次打印6、7、8
- 第一次遍历到
- Python中for循环内赋值的变量不会在循环结束后销毁,循环跑完时,
a、b、c保留的是最后一轮循环的赋值:a=6、b=7、c=8 - 执行
my_list = a+b+c时,原本存储元组列表的my_list变量被新值覆盖:这里三个变量都是整数类型,+执行算术加法运算,计算结果为6+7+8=21 - 最后执行
print(my_list)时,打印的就是这个求和结果21
如果你原本的需求是把嵌套元组里的所有元素展开拼成一个扁平列表,当前写法无法达成——循环过程中没有留存前两轮遍历到的元素,循环结束后只能拿到最后一个元组解包出的三个值。
内容的提问来源于stack exchange,提问作者Amila
相关产品推荐
相关产品推荐

