对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遍历删除字典里值为空的元素报错问题
Sep 11 Python
python实现二叉树的遍历
Dec 11 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
python将.ppm格式图片转换成.jpg格式文件的方法
Oct 27 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
Django bulk_create()、update()与数据库事务的效率对比分析
May 15 Python
Django之富文本(获取内容,设置内容方式)
May 21 Python
详解python字符串驻留技术
May 21 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文件上传后端处理小技巧
2016/05/22 PHP
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
javascript数组的使用
2013/03/28 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
window.onload使用指南
2015/09/13 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
2019/11/13 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
Python多进程编程技术实例分析
2014/09/16 Python
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
python操作oracle的完整教程分享
2018/01/30 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
使用Tkinter制作信息提示框
2020/02/18 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
师生聚会感言
2014/01/26 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
小学运动会口号
2014/06/07 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android