详解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 相关文章推荐
Django REST为文件属性输出完整URL的方法
Dec 18 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
启动Atom并运行python文件的步骤
Nov 09 Python
详解python3 + Scrapy爬虫学习之创建项目
Apr 12 Python
浅析python redis的连接及相关操作
Nov 07 Python
python从zip中删除指定后缀文件(推荐)
Dec 05 Python
Python json读写方式和字典相互转化
Apr 18 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 Python
python反扒机制的5种解决方法
Feb 06 Python
Python运算符+与+=的方法实例
Feb 18 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
网络资源
2006/10/09 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
用 JSON 处理缓存
2007/04/27 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
vuejs点击class变化的实例
2018/09/05 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
jQuery实现穿梭框效果
2021/01/19 jQuery
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
python获取代理IP的实例分享
2018/05/07 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
业务员自荐信范文
2014/04/20 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
人民调解协议书范本
2014/10/11 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
安全教育的主题班会
2015/08/13 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript