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和MD5实现网站挂马检测程序
Mar 13 Python
跟老齐学Python之开始真正编程
Sep 12 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
Python常见数字运算操作实例小结
Mar 22 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
Python调用shell命令常用方法(4种)
May 11 Python
python 利用opencv实现图像网络传输
Nov 12 Python
Python3压缩和解压缩实现代码
Mar 01 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 fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
css图片自适应大小
2007/11/28 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
深入浅出vue图片路径的实现
2019/09/04 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
python发送伪造的arp请求
2014/01/09 Python
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
Python获取网页上图片下载地址的方法
2015/03/11 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
简单分析python的类变量、实例变量
2019/08/23 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
用python发送微信消息
2020/12/21 Python
泰国在线书店:SE-ED
2020/06/21 全球购物
医院护士的求职信范文
2013/12/26 职场文书
外企财务年会演讲稿
2014/01/03 职场文书
致800米运动员广播稿
2014/02/16 职场文书
需求分析说明书
2014/05/09 职场文书
运动会加油稿100字
2014/09/19 职场文书
自荐信怎么写
2015/03/04 职场文书
SpringBoot整合Minio文件存储
2022/04/03 Java/Android