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 文件和路径操作函数小结
Nov 23 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
介绍Python中的文档测试模块
Apr 28 Python
Python六大开源框架对比
Oct 19 Python
Python如何import文件夹下的文件(实现方法)
Jan 24 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
Python BS4库的安装与使用详解
Aug 08 Python
pycharm内无法import已安装的模块问题解决
Feb 12 Python
使用pytorch实现线性回归
Apr 11 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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
操作Oracle的php类
2006/10/09 PHP
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
浅析2种JavaScript继承方式
2015/12/04 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
python flask搭建web应用教程
2019/11/19 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
用python发送微信消息
2020/12/21 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
材料专业毕业生求职信
2014/02/26 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
大班下学期个人总结
2015/02/13 职场文书
民政工作个人总结
2015/02/28 职场文书
求职导师推荐信范文
2015/03/27 职场文书
小学数学国培研修日志
2015/11/13 职场文书
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS