定义:zip([iterable, ...])
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压),看下面的例子就明白了:
>>> a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = zip(a,b) [(1, 4), (2, 5), (3, 6)] >>> zip(a,c) [(1, 4), (2, 5), (3, 6)] >>> zip(*zipped) [(1, 2, 3), (4, 5, 6)]
对于这个并不是很常用函数,下面举几个例子说明它的用法:
* 二维矩阵变换(矩阵的行列互换)
比如我们有一个由列表描述的二维矩阵
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
通过python列表推导的方法,我们也能轻易完成这个任务
print [ [row[col] for row in a] for col in range(len(a[0]))] [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
另外一种让人困惑的方法就是利用zip函数:
>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> zip(*a) [(1, 4, 7), (2, 5, 8), (3, 6, 9)] >>> map(list,zip(*a)) [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
这种方法速度更快但也更难以理解,将list看成tuple解压,恰好得到我们“行列互换”的效果,再通过对每个元素应用list()函数,将tuple转换为list
* 以指定概率获取元素
>>> import random >>> def random_pick(seq,probabilities): x = random.uniform(0, 1) cumulative_probability = 0.0 for item, item_probability in zip(seq, probabilities): cumulative_probability += item_probability if x < cumulative_probability: break return item >>> for i in range(15): random_pick("abc",[0.1,0.3,0.6]) 'c' 'b' 'c' 'c' 'a' 'b' 'c' 'c' 'c' 'a' 'b' 'b' 'c' 'a' 'c'
这个函数有个限制,指定概率的列表必须和元素一一对应,而且和为1,否则这个函数可能不能像预想的那样工作。
稍微解释下,先利用random.uniform()函数生成一个0-1之间的随机数并复制给x,利用zip()函数将元素和他对应的概率打包成tuple,然后将每个元素的概率进行叠加,直到和大于x终止循环
这样,”a”被选中的概率就是x取值位于0-0.1的概率,同理”b”为0.1-0.4,”c”为0.4-1.0,假设x是在0-1之间平均取值的,显然我们的目的已经达到
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
相关推荐
通过上述讲解,可以看出zip()函数在Python中是一个非常实用的内置函数,尤其是在处理并行序列和矩阵转置等问题时,使用zip()可以大幅简化代码,提高执行效率。以上内容对Python编程学习和实践具有重要的参考价值。
Python中的`zip`函数是一个非常实用的内置工具,它允许你在多个可迭代对象之间进行同步迭代,将它们的对应元素组合成元组,并返回一个由这些元组组成的列表。这在处理多列数据或者需要同时操作多个序列时非常有用。 ...
本文主要介绍的是Python如何使用zip函数同时遍历多个迭代器,文中的版本为Python3,zip函数是Python内置的函数。下面话不多说,来看详细的内容。 应用举例 >>> list1 = ['a', 'b', 'c', 'd'] >>> list2 = ['apple...
这个压缩包“专门用于计算频散现象各种功能函数都提供并且还有举例说明.zip”显然是一个工具集合或者代码库,提供了用于分析和理解频散性质的函数和示例。以下将详细介绍其中可能包含的知识点: 1. **频散方程**:...
相反,所有的 GUI 交互都是通过简单的函数调用来调用的。EasyGUI 运行在 Python2 和3 上,除了 python 之外没有任何依赖。举例:>>> import easygui >>> easygui.ynbox('Shall I continue?', 'Title', ('...
6.17.2 元组类型操作符和内建函数、内建方法 6.18 元组的特殊特性 6.18.1 不可变性给元组带来了什么影响 6.18.2 元组也不是那么“不可变” 6.18.3 默认集合类型 6.18.4 单元素元组 ...
3. **Python中断言方法举例** - `assert`语句用于测试某个条件是否为真,如果为假则抛出`AssertionError`异常。例如: ```python assert x > 0, "x should be positive" ``` 4. **zip()函数用法** - `zip()`...
《剑指Offer》面试题Python实现《剑指Offer》面试题Python实现第2章面试基础知识2.2浏览器面试题2使用Python实现单例模式2.3数据结构面试题3二维数据库中的查找面试题4候选人面试题5从尾到头打印单链表面试题6重建...
* 通过模拟掷骰子的案例,学习 random 模块和 zip() 函数的使用 * 学习 Python 绘图库 matplotlib 和科学计算库 NumPy 第十章:案例 8 -- 空气质量指数(AQI)计算及分析 * 通过 AQI 计算的案例,学习分支结构、函数...
本例中,我们关注的是"运算程序设计举例.zip"这个文件,它包含了一个名为"运算程序设计举例.swf"的子文件,很可能是某种交互式教程或演示,用于解释运算程序设计的概念和实践。 运算程序设计主要涵盖以下几个关键...
这里我们使用melt()函数举例: ```python one_dim_df = df.melt(id_vars='Name', var_name='Attribute', value_name='Value') ``` 上述代码中,'Name'列被视为不变的标识符,'Attribute'将原来的列名转换为新的列,...
在本主题"5.6 曲线拟合应用举例(ppt)"中,我们将深入探讨曲线拟合的实际应用及其方法。 首先,我们要理解曲线拟合的基本原理。当面临一组离散的数据点时,我们可能希望找到一个连续函数来描述这些点的分布趋势。这...
4. **Python标准库**:内置函数(如len、range、zip、enumerate)、os模块(用于操作系统交互)、sys模块(系统相关)、re模块(正则表达式)、json模块(JSON数据处理)、collections模块(高级数据结构)。...
10. **软件工具**:在实际操作中,我们可以使用各种编程语言(如Python的Scipy库、R语言的akima包)或专业软件(如Matlab、Mathematica)来实现数据插值。 这个PPT很可能是通过具体的实例和案例,详细讲解了以上...
举例来说,当我们有一个名字列表`['Adam', 'Lisa', 'Bart', 'Paul']`,如果想要在迭代的过程中,同时打印出名次和名字,就可以使用`enumerate()`函数。通过设置`enumerate()`的起始索引参数为1(默认为0),就可以...
包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...
包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...