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中的深拷贝和浅拷贝详解
Jun 03 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
详解Python中的正则表达式
Jul 08 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
Python中如何引入第三方模块
May 27 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
Aug 24 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也能干大事 随机函数
2015/04/14 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
jQuery实现的简单获取索引功能示例
2018/06/04 jQuery
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
python动态加载变量示例分享
2014/02/17 Python
Python中实现常量(Const)功能
2015/01/28 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
python enumerate函数的使用方法总结
2017/11/15 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
python七夕浪漫表白源码
2019/04/05 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
秘书英文求职信范文
2014/01/31 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
党员自评材料范文
2014/12/17 职场文书
团组织推优材料
2014/12/29 职场文书
单位车辆管理制度
2015/08/05 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
送给客户微信问候语!
2019/07/04 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python
关于Python中*args和**kwargs的深入理解
2021/08/07 Python