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 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
简单理解Python中基于生成器的状态机
Apr 13 Python
Python实现将xml导入至excel
Nov 20 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
python random从集合中随机选择元素的方法
Jan 23 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
django 信号调度机制详解
Jul 19 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
Pytorch实现LSTM和GRU示例
Jan 14 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 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
简单的cookie计数器实现源码
2013/06/07 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
一端时间轮换的广告
2006/06/26 Javascript
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
js精度溢出解决方案
2012/12/02 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
python检测远程服务器tcp端口的方法
2015/03/14 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
公务员培训心得体会
2013/12/28 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
人事档案接收函
2014/01/12 职场文书
教师远程培训感言
2014/03/06 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
如何自己动手写SQL执行引擎
2021/06/02 MySQL
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python
MySQL创建管理KEY分区
2022/04/13 MySQL