详解Python3序列赋值、序列解包


Posted in Python onMay 14, 2019

上节我们提到解决赋值中等号两边参数不一致的方法可以通过切片,但在Python3中我们可以利用特定的语法更加方便的处理这种情况,如下示例。

当带 * 出现在结尾间时

L = [1, 2, 3, 4, 5]
a, *b = L
print(a, b)

示例结果:

1 [2, 3, 4, 5]

我们可以看到a匹配了列表中第一个元素值,而b匹配了后面所有的内容,并且为列表。即当我们利用带 * 符号匹配时,就可以解决赋值时等号两边元素数量不相等的情形,那么这种带 * 的处理方式都有哪些详细的使用场景和用法呢?

当带 * 出现在中间时

L = [1, 2, 3, 4, 5]
a, *b, c = L
print(a, b, c)

示例结果:

1 [2, 3, 4] 5

即a和c获取了开头和结尾的元素值,而中间所有的元素值都是赋值给了b

当带 * 出现在开头时

L = [1, 2, 3, 4, 5]
*a, b = L
print(a, b)

即b获取了列表结尾的元素值,而开头到末尾但不包含末尾的所有元素值赋值给了a

通用化

类似序列赋值,扩展的序列解法的用法也可以扩展到任何序列类型,比如元组,字符串:

S = 'PYTHON'
a,b,*c = S
print(a,b,c)
a,b,*c = list(S)
print(a,b,c)

示例结果

P Y ['T', 'H', 'O', 'N']
P Y ['T', 'H', 'O', 'N']

即我们可以看到字符串的结果和处理列表非常相似,即和对 list(S) 进行扩展序列解包的结果一致。

一些边界情况

在使用扩展序列解包语法,我们也可能遇到一些极端的情况,比如没有剩下的内容用于匹配带 * 的项,此时该项会被赋值为空列表 [] 。

L = [1, 2, 3, 4]
a, b, c, d, *e = L
1 2 3 4 []

而如果在赋值时出现带多个 * 项,或者只有带 * 的项都会引发错误:

L = [1, 2, 3, 4]
*a, b, *c = L

L = [1, 2, 3, 4]
*a = L

*a, b, *c = L
   ^
SyntaxError: two starred expressions in assignment
  *a = L
  ^
SyntaxError: starred assignment target must be in a list or tuple

总结

以上所述是小编给大家介绍的Python3序列赋值、序列解包,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
在Python中使用mongoengine操作MongoDB教程
Apr 24 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
python实现简易动态时钟
Nov 19 Python
Python生成rsa密钥对操作示例
Apr 26 Python
python 模拟贷款卡号生成规则过程解析
Aug 30 Python
python3中pip3安装出错,找不到SSL的解决方式
Dec 12 Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 Python
python3.8下载及安装步骤详解
Jan 15 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
python pyg2plot的原理知识点总结
Feb 28 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
Mar 03 Python
Python+SeaTable实现计算两个日期间的工作日天数
Jul 07 Python
Python实战之制作天气查询软件
May 14 #Python
python中时间模块的基本使用教程
May 14 #Python
使用Python正则表达式操作文本数据的方法
May 14 #Python
Django如何防止定时任务并发浅析
May 14 #Python
python3 pygame实现接小球游戏
May 14 #Python
Django 多环境配置详解
May 14 #Python
python仿evething的文件搜索器实例代码
May 13 #Python
You might like
深入array multisort排序原理的详解
2013/06/18 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
php实现对象克隆的方法
2015/06/20 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
Python Web服务器Tornado使用小结
2014/05/06 Python
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
python编程嵌套函数实例代码
2018/02/11 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
pandas实现选取特定索引的行
2018/04/20 Python
python在openstreetmap地图上绘制路线图的实现
2019/07/11 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
Pytorch之finetune使用详解
2020/01/18 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
分布式数据库需要考虑哪些问题
2013/12/08 面试题
化工专业大学生职业生涯规划书
2014/01/14 职场文书
人力资源专员岗位职责
2014/01/30 职场文书
药品采购员岗位职责
2014/02/08 职场文书
大学生素质拓展活动方案
2014/02/11 职场文书
2014年国培研修感言
2014/03/09 职场文书
就业协议书范本
2014/10/08 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
优秀大学生自荐信
2015/03/26 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书