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多线程编程中的join函数使用心得
Sep 02 Python
学习python 之编写简单乘法运算题
Feb 27 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
python 读取文件并替换字段的实例
Jul 12 Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
Python如何实现线程间通信
Jul 30 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 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常用的url处理函数总结
2014/11/19 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
python中正则表达式的使用详解
2014/10/17 Python
python字符串替换的2种方法
2014/11/30 Python
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
Python如何获取系统iops示例代码
2016/09/06 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
基于pip install django失败时的解决方法
2018/06/12 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
手写一个python迭代器过程详解
2019/08/27 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
大学生护理专业自荐信
2013/10/03 职场文书
开业庆典邀请函
2014/01/08 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
战略合作意向书范本
2014/04/01 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
农行心得体会
2014/09/02 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
python某漫画app逆向
2021/03/31 Python