a=[1,2,3]
b=[1,2,3]
有没有办法在一条线上做到这一点? (显然不是用“;”)
a,b=[1,2,3]
由于,无效
a,b,c=[1,2,3]
A = 1 B = 2 C = 3
答案 0 :(得分:10)
In [18]: a,b=[1,2,3],[1,2,3]
In [19]: a
Out[19]: [1, 2, 3]
In [20]: b
Out[20]: [1, 2, 3]
你可能也想这样做:
In [22]: a=b=[1,2,3]
In [23]: a
Out[23]: [1, 2, 3]
In [24]: b
Out[24]: [1, 2, 3]
但请注意,a is b
在这种情况下为True
,即a
只是b
的引用
答案 1 :(得分:6)
a,b,c = [[1,2,3] for _ in range(3)]
每个指向不同的对象
答案 2 :(得分:5)
编辑:由DSM找到以便以下行工作,你需要将b声明为一个列表,以便我的代码能够工作(所以这不再是一行,但我会把它留在这里作为一个参考)。根据Paulo Bu
的建议更改了订单a=[1,2,3]
b=a[:]
旧代码:
b=[]
a=b[:]=[1,2,3]
这会将值分配给b,然后将所有值从b复制到。
如果你这样做:
a=b=[1,2,3]
然后更改
b[1] = 0
a也会改变
答案 3 :(得分:1)
>>> a = b = [1, 2, 3]
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> b = [3, 2, 1]
>>> b
[3, 2, 1]
>>> a
[1, 2, 3]
答案 4 :(得分:1)
a,b = [1,2,3],[1,2,3]
在一行中完成并指向不同的对象。
a=b=[1,2,3]
很清楚但指向同一个对象。
在这两种情况下都尝试a.pop(1)
,您会看到差异。
答案 5 :(得分:0)
注意......这个解决方案 A = B = [1,2,3]
导致将相同(可变)列表分配给ivar的a和b。原始问题显示2个不同的列表分配给&湾
此解决方案遇到同样的问题:
>>> a,b = ([1,2,3],)*2
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> b.append(4)
>>> b
[1, 2, 3, 4]
>>> a
[1, 2, 3, 4]