对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 相关文章推荐
一则python3的简单爬虫代码
May 26 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
Python 判断是否为质数或素数的实例
Oct 30 Python
python opencv实现图片旋转矩形分割
Jul 26 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
Jan 23 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
Apr 01 Python
python tkinter实现屏保程序
Jul 30 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
python 基于wx实现音乐播放
Nov 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三元运算的2种写法代码实例
2014/05/12 PHP
根据json字符串生成Html的一种方式
2013/01/09 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
Python 26进制计算实现方法
2015/05/28 Python
python 开发的三种运行模式详细介绍
2017/01/18 Python
Python使用getpass库读取密码的示例
2017/10/10 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
关于python多重赋值的小问题
2019/04/17 Python
Python中字符串List按照长度排序
2019/07/01 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
Python 中如何写注释
2020/08/28 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
广告设计专业自荐信范文
2013/11/14 职场文书
作风大整顿心得体会
2014/09/10 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
创业计划书之养殖业
2019/10/11 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
浅谈Python numpy创建空数组的问题
2021/05/25 Python
Go语言 详解net的tcp服务
2022/04/14 Golang