对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 相关文章推荐
PyQt 线程类 QThread使用详解
Jul 16 Python
Python+Turtle动态绘制一棵树实例分享
Jan 16 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
Sep 04 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 Python
Pandas中Series和DataFrame的索引实现
Jun 27 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
深入浅析Python 函数注解与匿名函数
Feb 24 Python
python绘制玫瑰的实现代码
Mar 02 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 Python
Python 日期与时间转换的方法
Aug 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
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
项目实践之javascript技巧
2007/12/06 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python正则表达式使用范例分享
2016/12/04 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
驾驶员岗位职责
2014/01/29 职场文书
化妆品店促销方案
2014/02/24 职场文书
2014年公务员工作总结
2014/11/18 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技