对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基础教程之自定义函数介绍
Aug 29 Python
Python实现多线程抓取妹子图
Aug 08 Python
Python 字典与字符串的互转实例
Jan 13 Python
python实现电子产品商店
Feb 26 Python
python3使用matplotlib绘制条形图
Mar 25 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
Python实现AI自动抠图实例解析
Mar 05 Python
Django后端按照日期查询的方法教程
Feb 28 Python
OpenCV-Python实现轮廓的特征值
Jun 09 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
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
js实现随机抽奖
2020/03/19 Javascript
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
Python 操作 MySQL数据库
2020/09/18 Python
几个MySql的面试题
2013/04/22 面试题
人力资源主管职责范本
2014/03/05 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
西安大雁塔导游词
2015/02/10 职场文书
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server