python序列的解包

序列解包

今天简记一个关于序列的小知识——序列解包
(当然,解包这一概念不仅仅可用于序列,只要对象是可迭代的,就可以解包操作)
首先先来简介一下什么是序列,序,即为顺序,列,多个元素组成的一个集合。序列就是一个有顺序的集合。比如字符串,列表,元组等可通过下标找到其对应元素的集合(注:此处的集合只是对多个元素的组成的一个引用名,并非python中的set)
okk,我们通过一个小问题来引入我们这个序列解包。

题:如何将一个包含多个元素的序列中的元素赋值给多个变量?

# 先定义一个序列
a = 1,2,3,4,5
# 引入序列解包这个概念,用多个变量来接收序列a中的元素
s,d,f,g,h = a
# 输出变量查看结果
print(s,d,f,g,h)
1 2 3 4 5
# 乱序输出
print(h,s,g,d,f)
5 1 4 2 3

可,通过这个小题我们已经可以大致了解序列解包怎么使用了。但是需要注意一点,用来接收序列的变量必须与序列元素数目保持一致,否则会报错

>>> a = 1,2,3,4,5
>>> s,d,f = a
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    s,d,f = a
ValueError: too many values to unpack (expected 3)

哦豁,果然报错了,呢有时候我们就只想用少于元素的变量去接收呢?我们可以使用 *(星号表达式) 来进行模糊匹配,这个在sql中也有涉及到哦

>>> a = 1,2,3,4,5,6,7,8
>>> s,d,f,*g = a
>>> print(s,d,f,g)
1 2 3 [4, 5, 6, 7, 8]

值得注意的是,*匹配的值是一个列表,其中包含了没有变量对应的数值,还是上代码来帮助理解吧

>>> a = 1,2,3,4,5,6,7,8
>>> w,r,*f,d = a
>>> print(w,r,f,d)
1 2 [3, 4, 5, 6, 7] 8

同样的,我们还可以将一个值赋给多个变量。

>>> a = 1
>>> b = 1
>>> c = 1
>>> print(a,b,c)
1 1 1
>>> a = b = c = 2 # 链式赋值
>>> print(a,b,c)
2 2 2

序列解包顾名思义是对于序列来讲,即得有顺序。像无序的字典(dict)和集合(set)是不适用的,(不适用不代表不能用!!!)因为其具有无序性,所以变量接收数值时会造成匹配紊乱。我们实操举证:

>>> w = {'a','b','c','d','e'}
>>> q,e,r,t,y = w
>>> print(q,e,r,t,y)
c a b e d

我们会发现变量与数值并未按照其顺序对应,所以造成了匹配紊乱
但是,这种匹配是可以使用的,

>>> w = {'a','b','c','d','e'}
>>> q,e,r,t,y = w
>>> print(q,e,r,t,y)
c a b e d
>>> print(e,y,t,r,q)
a d e b c
>>> print(y,q,t,r,e)
d c e b a

我们可以通过输出发现,尽管他没按照原始顺序匹配对应关系,但是他的乱序匹配是一定值。有的人会想这不一样可以解包嘛,为啥非要叫序列解包,文章前面我们已经提了一嘴,不仅仅只是元组或列表,只要对象是可迭代的,就可以执行该操作。但是,不匹配的对应关系会影响我们的效率,在一个项目中可没有呢么多时间去缕清这些对应关系,所以,这是一个效率问题。

**
此处强调一下就是这个解包适用于所有可迭代对象,并不是只可用于序列,这里讲述序列解包是因为更方便我们的序列使用。
**
好了,今天的分享就这些吧,文章内容或许略显拖沓。(作者小白多多包涵),若有不对的地方请给位前辈不吝赐教。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值