对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中的len()函数的使用
Apr 07 Python
python获取多线程及子线程的返回值
Nov 15 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
windows下numpy下载与安装图文教程
Apr 02 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
Python进程池Pool应用实例分析
Nov 27 Python
Python作用域与名字空间原理详解
Mar 21 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
Python docutils文档编译过程方法解析
Jun 23 Python
python中字符串的编码与解码详析
Dec 03 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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代码包装修正版
2008/03/15 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
vue.js表格分页示例
2016/10/18 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
解读! Python在人工智能中的作用
2017/11/14 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
django 单表操作实例详解
2019/07/30 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
python实现图像拼接
2020/03/05 Python
python 安装移动复制第三方库操作
2020/07/13 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
什么是命名空间(NameSpace)
2015/11/24 面试题
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
学生安全责任书模板
2014/07/25 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
一级电子管军用接收机测评
2022/04/05 无线电