对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安装第三方库及常见问题处理方法汇总
Sep 13 Python
python基础之入门必看操作
Jul 26 Python
matplotlib绘制动画代码示例
Jan 02 Python
Python实现App自动签到领取积分功能
Sep 29 Python
Python 单例设计模式用法实例分析
Sep 23 Python
Django REST Framework之频率限制的使用
Sep 29 Python
利用Pytorch实现简单的线性回归算法
Jan 15 Python
python实现加密的方式总结
Jan 19 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
python 伯努利分布详解
Feb 25 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 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 mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
运算符&&的三个不同层次
2013/04/07 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
使用webpack和rollup打包组件库的方法
2021/02/25 Javascript
Python常用列表数据结构小结
2014/08/06 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
keras:model.compile损失函数的用法
2020/07/01 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
执法作风整顿剖析材料
2014/10/11 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
nginx结合openssl实现https的方法
2021/07/25 Servers
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python