wangjuju123

2018-11-23   阅读量: 727

数据分析师 Python编程

序列解包

扫码加入数据分析学习群

赋值语句你见过很多,有的给变量赋值,还有的给数据结构的一部分(如列表中的元素和切 片,或者字典项)赋值,但还有其他类型的赋值语句。例如,可同时(并行)给多个变量赋值:

>>> x, y, z = 1, 2, 3

>>> print(x, y, z)

1 2 3

看似用处不大?看好了,使用这种方式还可交换多个变量的值。

>>> x, y = y, x

>>> print(x, y, z)

2 1 3

实际上,这里执行的操作称为序列解包(或可迭代对象解包):将一个序列(或任何可迭代 对象)解包,并将得到的值存储到一系列变量中。下面用例子进行解释。

>>> values = 1, 2, 3

>>> values

(1, 2, 3)

>>> x, y, z = values

>>> x

1

这在使用返回元组(或其他序列或可迭代对象)的函数或方法时很有用。假设要从字典中随 便获取(或删除)一个键值对,可使用方法popitem,它随便获取一个键值对并以元组的方式 返回。接下来,可直接将返回的元组解包到两个变量中。

>>> scoundrel = {'name': 'Robin', 'girlfriend': 'Marion'}

>>> key, value = scoundrel.popitem()

>>> key

'girlfriend'

>>> value

'Marion'

这让函数能够返回被打包成元组的多个值,然后通过一条赋值语句轻松地访问这些值。要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。

>>> x, y, z = 1, 2

Traceback (most recent call last): File "<stdin>", line 1, in <module>

ValueError: need more than 2 values to unpack

>>> x, y, z = 1, 2, 3, 4

Traceback (most recent call last): File "<stdin>", line 1, in <module>

ValueError: too many values to unpack

可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,如下例所示:

>>> a, b, *rest = [1, 2, 3, 4]

>>> rest

[3, 4]

还可将带星号的变量放在其他位置。

>>> name = "Albus Percival Wulfric Brian Dumbledore"

>>> first, *middle, last = name.split()

>>> middle

['Percival', 'Wulfric', 'Brian']

赋值语句的右边可以是任何类型的序列,但带星号的变量终包含的总是一个列表。在变量 和值的个数相同时亦如此。

>>> a, *b, c = "abc"

>>> a, b, c

('a', ['b'], 'c')

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.0000 0 3 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子