Python for循环星号解包如何固定各解包变量的列表长度?
实现方案
方案1:切片提取(全Python版本兼容)
直接按索引范围截取对应长度的片段即可,逻辑直观不依赖特定Python版本:
l = [[1, 2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15, 16]] for sub_list in l: x = sub_list[:4] # 截取前4个元素 y = sub_list[4:7] # 截取索引4-6的3个元素 z = sub_list[7] # 取最后1个元素 print(x) print(y) print(z)
运行后会输出你需要的结果,第一个子列表对应输出[1, 2, 3, 4]、[5, 6, 7]、8,第二个子列表对应输出[9, 10, 11, 12]、[13, 14, 15]、16。
方案2:定长解包(适合子列表长度固定的场景)
你的子列表长度固定为8(刚好满足4+3+1的拆分规则),可以直接用变量匹配所有位置,可读性更高:
l = [[1, 2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15, 16]] for a, b, c, d, e, f, g, z in l: x = [a, b, c, d] y = [e, f, g] print(x) print(y) print(z)
补充说明:Python不支持同一赋值层级出现多个
*表达式,因此无法直接用*x, *y, z的写法同时匹配两个变长片段,上述两种是当前最简洁的实现方式。
内容的提问来源于stack exchange,提问作者Ricky
相关产品推荐
相关产品推荐

