需求:
很多时候手上已经有了一个具有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)的更多相关文章

  1. Python实用黑科技——解包元素(2)

    需求: 前面的文章讲的是使用变量的个数需要和迭代器数据变量的元素个数相同的方法,但更多的时候确实不想根据元素个数n来定义相应多的变量,而是希望用较少的变量( def drop_first_last(g ...

  2. Python实用黑科技——找出最大/最小的n个元素

    需求: 快速的获取一个列表中最大/最小的n个元素. 方法: 最简便的方法是使用heapq模组的两个方法nlargest()和nsmallest(),例如: In [1]: import heapqIn ...

  3. Python实用黑科技——找出序列里面出现次数最多的元素

    需求: 如何从一个序列中快速获取出现次数最多的元素. 方法: 利用collections.Counter类可以解决这个问题,特别是他的most_common()方法更是处理此问题的最快途径.比如,现在 ...

  4. Python实用黑科技——以某个字段进行分组

    需求: 当前有个字典实例,你想以某个字段比如”日期”对整个字典里面的元素进行分组. 方法: itertools.groupby()函数是专门用来干这个活的.请看下面这个例子,这里有一个列表构成的字典, ...

  5. python基础之打/解包及运算符与控制流程

    python基础之打/解包及运算符与控制流程 python中的解压缩(即序列类型的打包和解包) python提供了两个设计元祖和其他序列类型的处理的便利,也就是自动打包与自动解包功能,比如: data ...

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

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

  7. Python中的参数解包:`*`表达式和 `**`表达式

    目录 1.参数解包:方法调用中的*表达式和**表达式 2.参数解包:方法定义中的*表达式和**表达式 3.在元组,列表,集合和字典中解包 4.Extended Unpacking:赋值表达式左边的*表 ...

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

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

  9. python收集参数与解包

    收集任意数量的实参 def make_pizza(*toppings): """打印顾客点的所有配料""" print(toppings) ...

随机推荐

  1. Python 常用外部模块详解

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  2. Promise.all的使用

    我有一个需求如下: 有一个学生号的数组,根据这个数组,取出相关学生的所有信息.获取学生信息的接口用setTime模拟,假设每次请求需要耗时2s,代码如下 // 获取学生信息接口 function ge ...

  3. 怎样写一个Hello World!

    Python 的 Hello, World! 应该是所有语言里面最简单的: print("Hello, World!")

  4. hdu 1305 还是字典树

    #include<cstdio> #include<iostream> #include<string> #include<cstdlib> #defi ...

  5. python 画3D的高斯曲线

    用python画3D的高斯曲线,我想如果有多个峰怎么画? import numpy as npimport matplotlib.pyplot as pltimport mathimport mpl_ ...

  6. 如何给Swagger加注释

    在Startup.cs文件中的ConfigureServices()方法中添加如下代码即可 services.AddSwaggerGen(options => { options.Swagger ...

  7. Django多对多

    表名小写+_set()  得到的是一个QuertSet集合,她的后面可以跟 .add()   .remove()   .update()   .clear() models.py  文件 # 学生表 ...

  8. Python爬取爱奇艺资源

    像iqiyi这种视频网站,现在下载视频都需要下载相应的客户端.那么如何不用下载客户端,直接下载非vip视频? 选择你想要爬取的内容 该安装的程序以及运行环境都配置好 下面这段代码就是我在爱奇艺里搜素“ ...

  9. express相关操作

    1.   安装应用生成器npm install express-generator –g 2.   生成项目Express --view=ejs myapp 3.   进入项目安装依赖包 npm in ...

  10. zxx.cms.app 开发中的一些git命令

    第一行命令 查看当前项目git的状态 显示是干净的 第二行创建一个 login 分支 并且切换到login 分支 用于login功能模块的开发 第三行 查看当前 所有的 分支 安装less-loade ...