转载自:https://blog.csdn.net/yilovexing/article/details/80576788

序列解包是 Python 3.0 之后才有的语法

什么是序列解包呢?先看一个例子:

  1. >>> a, b, c = 1, 2, 3
  2. >>> a
  3. 1
  4. >>> b
  5. 2
  6. >>> c
  7. 3
  8. >>>

这种方法并不限于列表和元组,而是适用于任意序列类型(甚至包括字符串和字节序列)。只要赋值运算符左边的变量数目与序列中的元素数目相等,

你都可以用这种方法将元素序列解包到另一组变量中。

解包的使用还可以利用 * 表达式获取单个变量中的多个元素,只要它的解释没有歧义即可。

* 获取的值默认为 list

# 获取剩余部分:

  1. >>> a, b, *c = 0, 1, 2, 3
  2. >>> a
  3. 0
  4. >>> b
  5. 1
  6. >>> c
  7. [2, 3]

# 获取中间部分:

  1. >>> a, *b, c = 0, 1, 2, 3
  2. >>> a
  3. 0
  4. >>> b
  5. [1, 2]
  6. >>> c
  7. 3

# 如果左值比右值要多,那么带 * 的变量默认为空

  1. >>> a, *b, c = 0, 1
  2. >>> a
  3. 0
  4. >>> b
  5. []
  6. >>> c
  7. 1
  1. >>> a, b, *c = 0, 1
  2. >>> a
  3. 0
  4. >>> b
  5. 1
  6. >>> c
  7. []

# 嵌套解包

  1. >>> (a, b), (c, d) = (1, 2), (3, 4)
  2. >>> a
  3. 1
  4. >>> b
  5. 2
  6. >>> c
  7. 3
  8. >>> d
  9. 4
  10. >>> a, b, c, d
  11. (1, 2, 3, 4)

接下来实战一下,假如一个字符串 'ABCDEFGH',要输出下列格式:

  1. A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
  2. B ['C', 'D', 'E', 'F', 'G', 'H']
  3. C ['D', 'E', 'F', 'G', 'H']
  4. D ['E', 'F', 'G', 'H']
  5. E ['F', 'G', 'H']
  6. F ['G', 'H']
  7. G ['H']
  8. H []

即每次取出第一个作为首,然后的字符串拆成列表,放置在后面

一般的处理过程是:

1. 将切片中索引为 0 的字符赋值给 a

2. 将切片中索引为 1 之后字符再赋值给 s

3. 用 list 函数将字符串转变为列表

4. 用 while 循环来 s 来判断,为空,则退出循环

  1. >>> s = 'ABCDEFGH'
  2. >>> while s:
  3. ... x, s = s[0], list(s[1:])
  4. ... print(x, s)
  5. ...
  6. A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
  7. B ['C', 'D', 'E', 'F', 'G', 'H']
  8. C ['D', 'E', 'F', 'G', 'H']
  9. D ['E', 'F', 'G', 'H']
  10. E ['F', 'G', 'H']
  11. F ['G', 'H']
  12. G ['H']
  13. H []

上面的处理,可以用序列解包的方法会来处理。序列解包,在赋值时无疑更方便、更简洁、更好理解、适用性更强!

运用序列解包的功能重写上面的代码:

  1. >>> s = 'ABCDEFGH'
  2. >>> while s:
  3. ... x, *s = s
  4. ... print(x, s)
  5. ...
  6. A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
  7. B ['C', 'D', 'E', 'F', 'G', 'H']
  8. C ['D', 'E', 'F', 'G', 'H']
  9. D ['E', 'F', 'G', 'H']
  10. E ['F', 'G', 'H']
  11. F ['G', 'H']
  12. G ['H']
  13. H []

Python3 序列解包的更多相关文章

  1. python 零散记录(五) import的几种方式 序列解包 条件和循环 强调getattr内建函数

    用import关键字导入模块的几种方式: #python是自解释的,不必多说,代码本身就是人可读的 import xxx from xxx import xxx from xxx import xx1 ...

  2. Python中的可变、不可变对象和赋值技巧序列解包

    可变对象和不可变对象 在python中一切皆对象.在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址. python中,对象分为可变(mutable)和不可变(immuta ...

  3. Python序列解包

    元组的序列解包range对象的序列解包迭代对象的序列解包列表的序列解包字典的序列解包序列解包与遍历序列解包的其它用法 元组的序列解包 x,y,z = (1,2,3) print(x,y,z) 1 2 ...

  4. Python——序列封包与序列解包

    一.序列封包与序列解包 把多个值赋给一个变量时,Python会自动的把多个值封装成元组,称为序列封包. 把一个序列(列表.元组.字符串等)直接赋给多个变量,此时会把序列中的各个元素依次赋值给每个变量, ...

  5. Python特色的序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...

  6. python 序列解包(解压缩)

    序列解包(解压缩) 所学的解压缩 如果我们给出一个列表,我们需要一次性取出多个值,我们是不是可以用下面的方式实现呢? name_list = ['nick', 'egon', 'jason'] x = ...

  7. 第4.7节 Python特色的序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...

  8. Python中序列解包与函数的参数收集之间的关系

    在<第4.7节 Python特色的序列解包.链式赋值.链式比较>中老猿介绍了序列解包,<第5.2节 Python中带星号的函数参数实现参数收集>介绍了函数的参数收集,实际上函数 ...

  9. 在python中元组与列表的区别及序列解包

    一. 元组与列表的区别 元组中的数据一旦定义就不允许更改. 元组没有append().extend()和insert()等方法,无法向元组中添加元素. 元组没有remove()或pop()方法,也无法 ...

随机推荐

  1. OracleAES加密

    OracleAES加密 (2012-04-29 21:52:15)转载▼标签: oracle aes 加密 it 分类: 开发-- 加密函数CREATE OR REPLACE FUNCTION FUN ...

  2. thinkphp (tcms)

    使用的是:3.2.3模板: js获取thinkphp数组时:var obj = {:json_encode($obj)}: 转成js对象:进而再处理: 创建公共控制器: thinkphp:ajax返回 ...

  3. 整理六百篇web前端知识混总

    9个有用的和免费的工具来支持动态网页开发 8个基本的引导工具的网页设计师 11款CSS3动画工具的开发 2016年某前端群题目答案参考 9最好的JavaScript压缩工具 创建响应式布局的10款优秀 ...

  4. easyui的combobox,自动搜索的下拉框

    作者:多来哈米 如图,输入关键字,左匹配检索 HTML代码 <input class="easyui-combobox" name="userId" id ...

  5. 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐!

    作者:编辑部的故事   <  开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐!   > 开源巨献:年度最佳 JavaScript 和 CSS 开源库推荐! Tutoria ...

  6. js去除空格12种方法

    注:本文非本人原著:原文作者: 黄卉  <js去除空格12种方法> //JS去除空格的方法目前共有12种: //实现1 String.prototype.trim = function() ...

  7. EasyUI Layout 添加、删除、折叠、展开布局

    <!DOCTYPE html> <html> <head> <title>吹泡泡的魚-主页</title> <link rel=&qu ...

  8. 字符串为空的比较 ==与equals() 区别(キ`゚Д゚´)!!基础很重要 !!!

    情况描述:我提交的代码,让老大审批了一次,讲真的,对于我来说受益匪浅,其中有一个印象很深的内容:一个字符串是否为空的判断,我以前敲代码一直都是这样写的,可是从来都没有意识到这个东西. 代码: if(s ...

  9. this容易混淆的示例

    [注]this 永远不会混乱,混乱的是我们而已. /* this永远指向当前函数的主人. this混乱: 1.添加了定时器/延时器 2.事件绑定 [注]函数如果发生了赋值,this就混乱了. */ 示 ...

  10. 备份还原数据数据库(固定IP版)

    1.新建data文件夹,用于存放备份数据 2.新建db文件夹,用于存放初建数据库为脚本 3.首次使用双击export.bat进行备份数据库: 4.以后每次使用双击setup.bat进行还原数据库: 备 ...