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实现的简单文本类游戏实例
Apr 28 Python
python中实现指定时间调用函数示例代码
Sep 08 Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 Python
用tensorflow搭建CNN的方法
Mar 05 Python
python获取url的返回信息方法
Dec 17 Python
Python类的继承、多态及获取对象信息操作详解
Feb 28 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
Python3 元组tuple入门基础
Feb 09 Python
python实现密度聚类(模板代码+sklearn代码)
Apr 27 Python
如何通过命令行进入python
Jul 06 Python
linux中nohup和后台运行进程查看及终止
Jun 24 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 XPath对XML文件查找及修改实现代码
2011/07/27 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
python 简易计算器程序,代码就几行
2009/08/29 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
python之pandas用法大全
2018/03/13 Python
python pyheatmap包绘制热力图
2018/11/09 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
Python骚操作之动态定义函数
2019/03/26 Python
简单了解python单例模式的几种写法
2019/07/01 Python
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
物联网工程专业推荐信
2014/09/08 职场文书
医德医风自我评价
2014/09/19 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
python读取pdf格式文档的实现代码
2021/04/01 Python