Python如何从嵌套元组列表迭代解包元组赋值给指定变量
嵌套坐标列表元组解包赋值实现
问题场景
现有存储坐标点的嵌套列表points,结构如下:
points=[[(0, 0), (1, 0), (2, 0), (0, 1)],[(0, 0), (1, 0), (2, 0), (2, 1)]]
需求为遍历列表中每个子列表时,将子列表内的4个元组按顺序分别赋值给p1、p2、p3、p4四个变量:
- 遍历第一个子列表时,预期赋值结果:
p1=(0,0) p2=(1,0) p3=(2,0) p4=(0,1)
- 遍历第二个子列表时,预期赋值结果:
p1=(0,0) p2=(1,0) p3=(2,0) p4=(2,1)
原有双层循环实现无法满足需求,遍历内层元素时所有变量会被赋值为同一个元组,错误代码如下:
for i in points: for j in i: p1=j[0],j[1] p2=j[0],j[1] p3=j[0],j[1] p4=j[0],j[1]
错误原因
原代码额外加了一层内层循环,会逐个遍历子列表里的单个元组,每读到一个元组就把四个变量全赋值为当前元组的值,循环结束后四个变量只会保留子列表最后一个元组的值,无法实现按位置分别赋值。
正确实现
每个子列表固定包含4个元组元素,和待赋值变量数量完全匹配,直接使用Python原生的可迭代对象解包语法即可,不需要写内层循环,代码如下:
points = [[(0, 0), (1, 0), (2, 0), (0, 1)], [(0, 0), (1, 0), (2, 0), (2, 1)]] for sub_points in points: # 按顺序解包子列表元素,对应赋值给四个变量 p1, p2, p3, p4 = sub_points # 此处编写后续业务逻辑,以下为打印验证代码 print(f"p1={p1}, p2={p2}, p3={p3}, p4={p4}")
运行后输出完全符合预期:
p1=(0, 0), p2=(1, 0), p3=(2, 0), p4=(0, 1) p1=(0, 0), p2=(1, 0), p3=(2, 0), p4=(2, 1)
如果后续子列表结构有调整,也可以用索引按位置取值,写法兼容性更强:
for sub_points in points: p1 = sub_points[0] p2 = sub_points[1] p3 = sub_points[2] p4 = sub_points[3] # 后续业务逻辑
内容的提问来源于stack exchange,提问作者raph c
相关产品推荐
相关产品推荐

