对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分析git log日志示例
Feb 27 Python
python批量修改文件名的实现代码
Sep 01 Python
python实现在字符串中查找子字符串的方法
Jul 11 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
pycharm 解除默认unittest模式的方法
Nov 30 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
PyQt5多线程刷新界面防假死示例
Dec 13 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Django自关联实现多级联动查询实例
May 19 Python
Python实现读取并写入Excel文件过程解析
May 27 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
网页上facebook分享功能具体实现
2014/01/26 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
关于Python数据结构中字典的心得
2017/12/04 Python
Python之pymysql的使用小结
2019/07/01 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
介绍一下JMS编程步骤
2015/09/22 面试题
如何现实servlet的单线程模式
2014/08/05 面试题
银行个人求职自荐信范文
2013/12/16 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
留学推荐信怎么写
2015/03/26 职场文书
民事起诉状范文
2015/05/19 职场文书
亮剑观后感300字
2015/06/05 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技