Python中zip()函数用法实例教程


Posted in Python onJuly 31, 2014

本文实例讲述了Python中zip()函数的定义及用法,相信对于Python初学者有一定的借鉴价值。详情如下:

一、定义:

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

二、用法示例:

读者看看下面的例子,对zip()函数的基本用法就可以明白了:

>>> 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)]

对于这个并不是很常用函数,下面举几个例子说明它的用法:

1.二维矩阵变换(矩阵的行列互换)

比如我们有一个由列表描述的二维矩阵

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

2.以指定概率获取元素

>>> 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 相关文章推荐
Python continue语句用法实例
Mar 11 Python
在Python的Django框架中创建语言文件
Jul 27 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
python DataFrame 取差集实例
Jan 30 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
将python运行结果保存至本地文件中的示例讲解
Jul 11 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 Python
Python爬取数据并实现可视化代码解析
Aug 12 Python
python读取mnist数据集方法案例详解
Sep 04 Python
python 学习GCN图卷积神经网络
May 11 Python
Python中apply函数的用法实例教程
Jul 31 #Python
python新手经常遇到的17个错误分析
Jul 30 #Python
Python使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 #Python
Python代码的打包与发布详解
Jul 30 #Python
Python中lambda的用法及其与def的区别解析
Jul 28 #Python
python代码制作configure文件示例
Jul 28 #Python
python编写网页爬虫脚本并实现APScheduler调度
Jul 28 #Python
You might like
php多任务程序实例解析
2014/07/19 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python Socket编程入门教程
2014/07/11 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
连接Python程序与MySQL的教程
2015/04/29 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
Python绘制热力图示例
2019/09/27 Python
Python调用.NET库的方法步骤
2019/12/27 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
运动会四百米广播稿
2014/01/19 职场文书
遗体告别仪式答谢词
2014/01/23 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
教学质量月活动总结
2015/05/11 职场文书
收入证明申请书
2015/06/12 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
详解python网络进程
2021/06/15 Python
spring boot中nativeQuery的用法
2021/07/26 Java/Android
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js