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实现ip查询示例
Mar 26 Python
Flask数据库迁移简单介绍
Oct 24 Python
Python set常用操作函数集锦
Nov 15 Python
基于循环神经网络(RNN)的古诗生成器
Mar 26 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
深入浅析Python中的迭代器
Jun 04 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
Python Django 前后端分离 API的方法
Aug 28 Python
python中property属性的介绍及其应用详解
Aug 29 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 Python
python运行脚本文件的三种方法实例
Jun 25 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
我的论坛源代码(五)
2006/10/09 PHP
php header()函数使用说明
2008/07/10 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
python实现接口并发测试脚本
2019/06/25 Python
简单了解python的一些位运算技巧
2019/07/13 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
keras 多gpu并行运行案例
2020/06/10 Python
平面设计师工作职责范文
2013/12/03 职场文书
交通志愿者活动总结
2014/06/27 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
大学教师个人总结
2015/02/10 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
五一晚会主持词
2015/07/01 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL