Python实用黑科技——解包元素(1)
需求:
很多时候手上已经有了一个具有n个元素的列表或者元组,你打算把这些元素单独取出来(解包)放入n个变量组成的集合(这里的集合和Python自己的set不同)中。
方法:
显然,最好的办法就是直接用赋值语句(=)来做这件事,唯一需要注意的就是,新变量的个数一定要和原列表、元组里面的元素个数相同:
In [1]: p = (4, 6, 7)
In [2]: x, y, z = p
In [3]: x
Out[3]: 4
In [4]: y
Out[4]: 6
In [5]: z
Out[5]: 7
In [7]: data = ['Jason', 2010, 59, ('SE', 'Web', 'Java')]
In [8]: name, graduate_year, weight, (job, content, language) = data
In [9]: name
Out[9]: 'Jason'
In [10]: job
Out[10]: 'SE'
In [11]: language
Out[11]: 'Java'
这里需要注意的是,如果个数不匹配,自然会得到一个错误报告:
In [12]: mine = (2, 3, 4)
In [13]: x, y = mine
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-13-be106769942b> in <module>()
----> 1 x, y = mine
ValueError: too many values to unpack (expected 2)
扩展:
上述解包方法实际上可以应用于所有类迭代器数据变量,除了上述的列表,元组,在字符串,文件,迭代器等上面自然也是可以使用的。例如:
In [14]: s = 'Jason'
In [15]: a, b, c, d, e = s
In [16]: a
Out[16]: 'J'
In [17]: c
Out[17]: 's'
In [18]: e
Out[18]: 'n'
当然,你也可以舍弃一些不想要的元素,在这里,Python并没有特别指明设定一个舍弃变量符号,你可以随意使用自己喜欢的符号,比如:
In [19]: data = ['qin', 'f', 'Chengdu', '6000']
In [20]: name, _, _, money = data
In [21]: name
Out[21]: 'qin'
In [22]: money
Out[22]: '6000'
5
6
这里的’_’就是被舍弃的变量。
整个来看,这篇讲述的技巧主要是比较方便的让用户快速取到想要的值,并且存储在新变量中。对于这些类迭代器的数据变量而言,一般大家都喜欢用下标来取对应元素,不过总是带着下标做操作,可能并不方便,因此适时的选用变量获取,有时候会容易一些。
————————————————
Python实用黑科技——解包元素(1)的更多相关文章
- Python实用黑科技——解包元素(2)
需求: 前面的文章讲的是使用变量的个数需要和迭代器数据变量的元素个数相同的方法,但更多的时候确实不想根据元素个数n来定义相应多的变量,而是希望用较少的变量( def drop_first_last(g ...
- Python实用黑科技——找出最大/最小的n个元素
需求: 快速的获取一个列表中最大/最小的n个元素. 方法: 最简便的方法是使用heapq模组的两个方法nlargest()和nsmallest(),例如: In [1]: import heapqIn ...
- Python实用黑科技——找出序列里面出现次数最多的元素
需求: 如何从一个序列中快速获取出现次数最多的元素. 方法: 利用collections.Counter类可以解决这个问题,特别是他的most_common()方法更是处理此问题的最快途径.比如,现在 ...
- Python实用黑科技——以某个字段进行分组
需求: 当前有个字典实例,你想以某个字段比如”日期”对整个字典里面的元素进行分组. 方法: itertools.groupby()函数是专门用来干这个活的.请看下面这个例子,这里有一个列表构成的字典, ...
- python基础之打/解包及运算符与控制流程
python基础之打/解包及运算符与控制流程 python中的解压缩(即序列类型的打包和解包) python提供了两个设计元祖和其他序列类型的处理的便利,也就是自动打包与自动解包功能,比如: data ...
- Python特色的序列解包、链式赋值、链式比较
一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...
- Python中的参数解包:`*`表达式和 `**`表达式
目录 1.参数解包:方法调用中的*表达式和**表达式 2.参数解包:方法定义中的*表达式和**表达式 3.在元组,列表,集合和字典中解包 4.Extended Unpacking:赋值表达式左边的*表 ...
- 第4.7节 Python特色的序列解包、链式赋值、链式比较
一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...
- python收集参数与解包
收集任意数量的实参 def make_pizza(*toppings): """打印顾客点的所有配料""" print(toppings) ...
随机推荐
- 怎样理解AJAX
AJAX: Asynchronous JavaScript and XML, 翻译过来就是: 异步的JavaScript与XML 这已经成为了一个通用名词, 字面意义已经消失了, 因为现在使用Java ...
- python经典小程序集锦(一) 实现九九乘法表
本篇文章主要是收集整理一些小程序以供大家娱乐,或者是在面试的时候使用到.文章会持续更新,希望大家收藏关注哦. 1.代码实现过程 for i in range(1, 10): for j in rang ...
- 电脑串口(com)被占用问题
最近使用串口与设备通信. 这个电脑一个有6个COM口,都要使用. 还有自带一个华为的4G通信模块,这个模块需要虚拟出4个COM口. 使用之前的Gost系统(只有1个物理COM版本的),导致物理COM口 ...
- MediaAPIController
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.D ...
- MySQL下载安装图文
一. MySQL下载 1. 进入MySQL官网官网地址:https://www.mysql.com/ 2. 点击DOWNLOADS 3. 点击Community(GPL) Downloads 4. 找 ...
- JS-上下文练习
/** * 因为JS没有块级作用域,if里面的foo又是以var形式声明的,所以会被提升上去, * 被赋值为undefined,之后undefined代表false,所以会进入if语句块, * foo ...
- ARM与x86 CPU架构对比
CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是CISC要用最少的机器语言指令 ...
- JavaSpring【六、AOP的API】
AOP API Spring1.2历史用法,现在仍然支持 现在xml配置和注解的用法是基于API的,只是比较简便
- django-bootstrap4|django 加载popper.min.js失败
1.现象 2.解决过程 2.1.右键查看网页源代码 在浏览器地址栏打开popper.min.js对应的URL,发现无法打开,这个地址是国外的,需要找一个可访问的地址替换. 2.2.找到URL在djan ...
- 织梦后台系统设置在PHP5.4环境中不能保存中文参数的解决方法
在没用PHP5.4的环境做Dede后台的时候,织梦58一直没有遇到这个问题,昨天上传一个新的模版到空间去测试发现后台的系统基本参数设置中所有的中文内容都无法保存,关于这个问题,其实以前也听说过,知识一 ...