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 类与元类的深度挖掘 II【经验】
May 06 Python
Python 中的Selenium异常处理实例代码
May 03 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
python使用thrift教程的方法示例
Mar 21 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
python实现雪花飘落效果实例讲解
Jun 18 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 Python
django项目中新增app的2种实现方法
Apr 01 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
如何在Python项目中引入日志
May 31 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
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
checkbox使用示例
2013/08/23 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
在Python中COM口的调用方法
2019/07/03 Python
Python帮你识破双11的套路
2019/11/11 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
python推导式的使用方法实例
2021/02/28 Python
上海奥佳笔试题面试题
2016/11/16 面试题
工程管理造价应届生求职信
2013/11/13 职场文书
白酒营销策划方案
2014/08/17 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
小鞋子观后感
2015/06/05 职场文书
靠谱准确的求职信
2019/04/02 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
nginx lua 操作 mysql
2022/05/15 Servers