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实现方法
Nov 18 Python
python 网络爬虫初级实现代码
Feb 27 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
Python获取二维矩阵每列最大值的方法
Apr 03 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
Apr 26 Python
python try except返回异常的信息字符串代码实例
Aug 15 Python
python列表生成器迭代器实例解析
Dec 19 Python
python函数定义和调用过程详解
Feb 09 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
python 如何设置守护进程
Oct 29 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下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
PHP 函数学习简单小结
2010/07/08 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
PyTorch预训练的实现
2019/09/18 Python
python与js主要区别点总结
2020/09/13 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
师范生自荐信范文
2013/10/06 职场文书
蛋糕店的商业计划书范文
2014/01/27 职场文书
团队经理竞聘书
2014/03/31 职场文书
煤矿安全生产标语
2014/06/06 职场文书
树转促学习心得体会
2014/09/10 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
优秀教研组申报材料
2014/12/26 职场文书
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python