Python 3中如何一行赋值多个同结构嵌套列表?
一行代码同时赋值多个独立的嵌套列表
当然可以实现!你的思路方向是对的,不过要注意避开列表浅拷贝的坑——直接用乘法会导致三个变量共享同一个列表对象,修改其中一个会影响另外两个。
正确的写法
你可以用生成器表达式或者列表推导式,一次性生成三个独立的[[] for _ in range(6)]结构,然后解包赋值给a、b、c:
方法1:生成器表达式(更高效,无中间列表)
a, b, c = ([[] for _ in range(6)] for _ in range(3))
方法2:列表推导式
a, b, c = [[[] for _ in range(6)] for _ in range(3)]
为什么不能直接用乘法?
如果写成下面这种形式:
a, b, c = [[] for _ in range(6)] * 3
会导致a、b、c指向同一个列表对象。比如你修改a[0].append(1),会发现b[0]和c[0]也变成了[1],这显然不是你想要的结果。
验证独立性
运行下面的代码可以确认三个变量是完全独立的:
a, b, c = ([[] for _ in range(6)] for _ in range(3)) a[0].append(42) print(a[0]) # 输出: [42] print(b[0]) # 输出: [] print(c[0]) # 输出: []
内容的提问来源于stack exchange,提问作者solub
相关产品推荐
相关产品推荐

