对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实现简单ftp客户端的方法
Jun 28 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 Python
基于Python的接口测试框架实例
Nov 04 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
python3+pyqt5+itchat微信定时发送消息的方法
Feb 20 Python
python 自动批量打开网页的示例
Feb 21 Python
Python高级特性与几种函数的讲解
Mar 08 Python
用pycharm开发django项目示例代码
Jun 13 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
Python使用grequests并发发送请求的示例
Nov 05 Python
Python使用Web框架Flask开发项目
Jun 01 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
Protoss建筑一览
2020/03/14 星际争霸
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
python 中的divmod数字处理函数浅析
2017/10/17 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
python实现抖音点赞功能
2019/04/07 Python
Python匿名函数及应用示例
2019/04/09 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
Python turtle库的画笔控制说明
2020/06/28 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
法学毕业生自荐信
2013/11/13 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang