Sliceable 对象单个元素的 Python 赋值

问题描述 投票:0回答:2

最近我看到:

a = [1]
 

print(a, type(a))

[b] = a

print(b)

b = a[0]


a = [1,2]

b = a[0]

print(b)

try :
    
    [b] = a
    
except Exception as e:
    
    print(e)

符号

[b] = a
实际上可以工作。

我是 Python 和一般编程的新手,以前从未发现过这一点。

我的好奇心是它为什么起作用,它是否与我无法想象的更复杂的情况相关,因为我的基础知识水平,它是否有效反对应该有一种 - 最好只有一种 - 明显的方法来做到这一点.,两便士给你。

python assign iterable pep8
2个回答
0
投票

这是一般解包语法的一种奇怪的情况,用于诸如交换两个变量而没有临时变量的上下文中:

a, b = b, a

外括号通常是可选的,但是当它解压单个值时,您需要括号或单独的尾随逗号,这很容易被错过:

b, = a

它与简单的索引不同,因为它验证是否存在“恰好”一个元素,不多也不少,如果违反该假设,则会引发异常;简单索引只会通知您序列是否太短,而不是太长。


-1
投票
[b] = a

没有按照你的想法去做。

这将从 

a

中解压所有项目并将它们分配给括号之间的变量。

由于 

a

中有多个值,因此失败。

有效的示例:

x = [1, 2, 3] [a, b, c] = x print(a) # 1 print(c) # 3

请注意,您也可以使用 
a, b, c = x

部分展开:

a = [1, 2, 3] b, *_ = a print(b) # 1

© www.soinside.com 2019 - 2024. All rights reserved.