对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在windows和linux下获得本机本地ip地址方法小结
Mar 20 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
Sep 11 Python
python 字符串只保留汉字的方法
Nov 16 Python
python实现贪吃蛇游戏
Mar 21 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
pytorch使用指定GPU训练的实例
Aug 19 Python
Python单元测试工具doctest和unittest使用解析
Sep 02 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
Python xlrd/xlwt 创建excel文件及常用操作
Sep 24 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保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
javascript globalStorage类代码
2009/06/04 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
Python多继承原理与用法示例
2018/08/23 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
运动会入场词60字
2014/02/15 职场文书
新任教师自我鉴定
2014/02/24 职场文书
星级党支部申报材料
2014/05/31 职场文书
运动会入场口号
2014/06/07 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
React forwardRef的使用方法及注意点
2021/06/13 Javascript
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android