python中的 zip函数详解及用法举例


Posted in Python onFebruary 16, 2020

python中zip()函数用法举例

定义:zip([iterable, ...])

zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压),看下面的例子就明白了:

示例1

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
 
xyz = zip(x, y, z)

print xyz运行的结果是:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

示例2,在两个list长度不相等时的情况:

x = [1, 2, 3]
y = [4, 5, 6, 7]
xy = zip(x, y)

print xy运行的结果是:

[(1, 4), (2, 5), (3, 6)]

示例3

>>> name=('jack','beginman','sony','pcky')
>>> age=(2001,2003,2005,2000)
>>> for a,n in zip(name,age):
  print a,n

输出:

jack 2001 beginman 2003 sony 2005 pcky 2000

示例4,只有一个list的情况:

x = [1, 2, 3]
x = zip(x)

print x运行的结果是:

[(1,), (2,), (3,)]

示例5:

搭配for循环,支持并行迭代操作方法 zip()方法用在for循环中,就会支持并行迭代:

l1 = [2,3,4]

l2 = [4,5,6]

for (x,y) in zip(l1,l2):


 print x,y,'--',x*y
2 4 -- 8
3 5 -- 15
4 6 -- 24

其实它的工作原理就是使用了zip()的结果,在for循环里解包zip结果中的元组,用元组赋值运算。就好像(x,y)=(2,6),赋值、序列解包操作。在对文件的操作中我们也会用到遍历,例如Python遍历文件夹目录与文件操作,就是很方便实用的。

1

示例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

示例7:以指定概率获取元素

>>> 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之间平均取值的,显然我们的目的已经达到

总结

以上所述是小编给大家介绍的python中的 zip函数详解及用法举例,希望对大家有所帮助!

Python 相关文章推荐
详解Python3中yield生成器的用法
Aug 20 Python
Python随机生成数据后插入到PostgreSQL
Jul 28 Python
使用python进行拆分大文件的方法
Dec 10 Python
python 为什么说eval要慎用
Mar 26 Python
python3实现小球转动抽奖小游戏
Apr 15 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 Python
wxPython色环电阻计算器
Nov 18 Python
Python如何使用字符打印照片
Jan 03 Python
python 实现线程之间的通信示例
Feb 14 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 Python
python搜索算法原理及实例讲解
Nov 18 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 #Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 #Python
使用Tensorboard工具查看Loss损失率
Feb 15 #Python
Keras使用tensorboard显示训练过程的实例
Feb 15 #Python
Python利用逻辑回归分类实现模板
Feb 15 #Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 #Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
Feb 15 #Python
You might like
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
php析构函数的简单使用说明
2015/08/24 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
python 文件操作api(文件操作函数)
2016/08/28 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
求职信的最佳写作思路
2014/02/01 职场文书
2014年设计师工作总结
2014/11/25 职场文书
Oracle 死锁的检测查询及处理
2021/09/25 Oracle