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通过floor函数舍弃小数位的方法
Mar 17 Python
python内存管理分析
Apr 08 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
Django基础三之视图函数的使用方法
Jul 18 Python
详解Django中异步任务之django-celery
Nov 05 Python
python 实现学生信息管理系统的示例
Nov 28 Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 Python
使用Pytorch训练two-head网络的操作
May 28 Python
Python实现制作销售数据可视化看板详解
Nov 27 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实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
vue组件的写法汇总
2018/04/12 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
python双向链表实现实例代码
2013/11/21 Python
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
Python中Collection的使用小技巧
2014/08/18 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
简述数据库的设计过程
2015/06/22 面试题
现代化办公人员工作的自我评价
2013/10/16 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫
如何通过一篇文章了解Python中的生成器
2022/04/02 Python