对Python3 序列解包详解


Posted in Python onFebruary 16, 2019

Python 中有很多很实用的语法糖,这些语法糖可以帮助我们简化代码、更易理解等优点,接下里再看一个 Python3 中特别实用的语法序列解包(序列解包是 Python 3.0 之后才有的语法)。

那什么是序列解包呢?先看一个例子:

>>> a, b, c = 1, 2, 3
>>> a
1
>>> b
2
>>> c
3
>>>

这种方法并不限于列表和元组,而是适用于任意序列类型(甚至包括字符串和字节序列)。只要赋值运算符左边的变量数目与序列中的元素数目相等,你都可以用这种方法将元素序列解包到另一组变量中。

解包的使用还可以更有逼格,可以利用 * 表达式获取单个变量中的多个元素,只要它的解释没有歧义即可。

* 获取的值默认为 list

# 获取剩余部分:

>>> a, b, *c = 0, 1, 2, 3
>>> a
0
>>> b
1
>>> c
[2, 3]

# 获取中间部分:

>>> a, *b, c = 0, 1, 2, 3
>>> a
0
>>> b
[1, 2]
>>> c
3

# 如果左值比右值要多,那么带 * 的变量默认为空

>>> a, b, *c = 0, 1
>>> a
0
>>> b
1
>>> c
[]
>>> a, *b, c = 0, 1
>>> a
0
>>> b
[]
>>> c
1

# 嵌套解包

>>> (a, b), (c, d) = (1, 2), (3, 4)
>>> a
1
>>> b
2
>>> c
3
>>> d
4
>>> a, b, c, d
(1, 2, 3, 4)

接下来实战一下,假如一个字符串 'ABCDEFGH',要输出下列格式:

A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
B ['C', 'D', 'E', 'F', 'G', 'H']
C ['D', 'E', 'F', 'G', 'H']
D ['E', 'F', 'G', 'H']
E ['F', 'G', 'H']
F ['G', 'H']
G ['H']
H []

即每次取出第一个作为首,然后的字符串拆成列表,放置在后面

一般的处理过程是:

1. 将切片中索引为 0 的字符赋值给 a

2. 将切片中索引为 1 之后字符再赋值给 s

3. 用 list 函数将字符串转变为列表

4. 用 while 循环来 s 来判断,为空,则退出循环

>>> s = 'ABCDEFGH'
>>> while s:
...   x, s = s[0], list(s[1:])
...   print(x, s)
... 
A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
B ['C', 'D', 'E', 'F', 'G', 'H']
C ['D', 'E', 'F', 'G', 'H']
D ['E', 'F', 'G', 'H']
E ['F', 'G', 'H']
F ['G', 'H']
G ['H']
H []

上面的处理,可以用序列解包的方法会来处理。序列解包,在赋值时无疑更方便、更简洁、更好理解、适用性更强!

运用序列解包的功能重写上面的代码:

>>> s = 'ABCDEFGH'
>>> while s:
...   x, *s = s
...   print(x, s)
... 
A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
B ['C', 'D', 'E', 'F', 'G', 'H']
C ['D', 'E', 'F', 'G', 'H']
D ['E', 'F', 'G', 'H']
E ['F', 'G', 'H']
F ['G', 'H']
G ['H']
H []

以上这篇对Python3 序列解包详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
最基础的Python的socket编程入门教程
Apr 23 Python
Python2.x版本中cmp()方法的使用教程
May 14 Python
Django中对数据查询结果进行排序的方法
Jul 17 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
celery4+django2定时任务的实现代码
Dec 23 Python
python快排算法详解
Mar 04 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
python yield关键词案例测试
Oct 15 Python
python实现取余操作的简单实例
Aug 16 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
对Python3 pyc 文件的使用详解
Feb 16 #Python
Python父目录、子目录的相互调用方法
Feb 16 #Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 #Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 #Python
Python3 导入上级目录中的模块实例
Feb 16 #Python
对Python3 goto 语句的使用方法详解
Feb 16 #Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
Feb 16 #Python
You might like
PHP 命名空间实例说明
2011/01/27 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
Python生成随机密码的方法
2017/06/16 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
厨师岗位职责
2013/11/12 职场文书
医院实习介绍信
2014/01/12 职场文书
《最后的姿势》教学反思
2014/02/27 职场文书
求职信怎么写
2014/05/23 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
Pytest中skip和skipif的具体使用方法
2021/06/30 Python