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 相关文章推荐
跟老齐学Python之深入变量和引用对象
Sep 24 Python
Python中使用select模块实现非阻塞的IO
Feb 03 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
python访问抓取网页常用命令总结
Apr 11 Python
创建pycharm的自定义python模板方法
May 23 Python
pymongo中group by的操作方法教程
Mar 22 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
Django实现跨域的2种方法
Jul 31 Python
Python pandas实现excel工作表合并功能详解
Aug 29 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
Python实现把类当做字典来访问
Dec 16 Python
Python 为什么推荐蛇形命名法原因浅析
Jun 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
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
php 无限极分类
2008/03/27 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
javascript this用法小结
2008/12/19 Javascript
用JS写的一个TableView控件代码
2010/01/23 Javascript
javascript之AJAX框架使用说明
2010/04/24 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python 为什么说eval要慎用
2019/03/26 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
会计专业应届生求职信
2013/11/24 职场文书
门诊挂号室室长岗位职责
2013/11/27 职场文书
化验室技术员岗位职责
2013/12/24 职场文书
买卖车协议书
2014/04/21 职场文书
敬老院活动总结
2014/04/28 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
物流业务员岗位职责
2015/04/03 职场文书
岁月神偷观后感
2015/06/11 职场文书
寒假致家长的一封信
2015/10/10 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
为什么node.js不适合大型项目
2021/04/28 Javascript
Tomcat弱口令复现及利用
2022/05/06 Servers