浅谈Python中的zip()与*zip()函数详解


Posted in Python onFebruary 24, 2018

前言

1.实验环境: Python 3.6;

2.示例代码地址:下载示例;

3.本文中元素是指列表、元组、字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表)。

zip(*iterables)函数详解

zip()函数的定义

从参数中的多个迭代器取元素组合成一个新的迭代器;

返回:
返回一个zip对象,其内部元素为元组;可以转化为列表或元组;

传入参数:元组、列表、字典等迭代器。

zip()函数的用法

当zip()函数中只有一个参数时

zip(iterable)从iterable中依次取一个元组,组成一个元组。

示例:

## zip()函数单个参数
list1 = [1, 2, 3, 4]
tuple1 = zip(list1)
# 打印zip函数的返回类型
print("zip()函数的返回类型:\n", type(tuple1))
# 将zip对象转化为列表
print("zip对象转化为列表:\n", list(tuple1))

输出:

zip()函数的返回类型:
<class 'zip'>
 zip对象转化为列表:
[(1,), (2,), (3,), (4,)]

当zip()函数有两个参数时 ◦zip(a,b)zip()函数分别从a和b依次各取出一个元素组成元组,再将依次组成的元组组合成一个新的迭代器--新的zip类型数据。

注意: ◦要求a与b的维数相同,当两者具有相同的行数与列数时,正常组合对应位置元素即可;

当a与b的行数或列数不同时,取两者结构中最小的行数和列数,依照最小的行数和列数将对应位置的元素进行组合;这时相当于调用itertools.zip_longest(*iterables)函数。

举例:

m = [[1,2,3], [4,5,6], [7,8,9]]
 n = [[2,2,2], [3,3,3], [4,4,4]]
 p = [[2,2,2], [3,3,3,]

zip(m, n)将返回([1, 2, 3], [2, 2, 2]), ([4, 5, 6], [3, 3, 3]), ([7, 8, 9], [4, 4, 4])

m[0], n[0] m[1], n[1] m[2], n[2]
[1,2,3] [2,2,2] [4,5,6] [3,3,3] [7,8,9] [4,4,4]

zip(m, p)将返回([1, 2, 3], [2, 2, 2]), ([4, 5, 6], [3, 3, 3])

m[0], n[0] m[1], n[1] m[2], n[2]
[1,2,3] [2,2,2] [4,5,6] [3,3,3] [7,8,9]

代码示例:

## zip()函数有2个参数
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
n = [[2, 2, 2], [3, 3, 3], [4, 4, 4]]
p = [[2, 2, 2], [3, 3, 3]]
# 行与列相同
print("行与列相同:\n", list(zip(m, n)))
# 行与列不同
print("行与列不同:\n", list(zip(m, p)))

输出:

行与列相同:
 [([1, 2, 3], [2, 2, 2]), ([4, 5, 6], [3, 3, 3]), ([7, 8, 9], [4, 4, 4])]
行与列不同:
 [([1, 2, 3], [2, 2, 2]), ([4, 5, 6], [3, 3, 3])]

zip()函数的应用

矩阵相加减、点乘

也可以使用for循环+列表推导式实现;

m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 n = [[2, 2, 2], [3, 3, 3], [4, 4, 4]]
## zip()应用
# 矩阵相加减、点乘
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
n = [[2, 2, 2], [3, 3, 3], [4, 4, 4]]
# 矩阵点乘
print('=*'*10 + "矩阵点乘" + '=*'*10)
print([x*y for a, b in zip(m, n) for x, y in zip(a, b)])
# 矩阵相加,相减雷同
print('=*'*10 + "矩阵相加,相减" + '=*'*10)
print([x+y for a, b in zip(m, n) for x, y in zip(a, b)])

输出:

[2, 4, 6, 12, 15, 18, 28, 32, 36][3, 4, 5, 7, 8, 9, 11, 12, 13]

*zip(*iterables)函数详解

zip(iterables)函数

*zip()函数是zip()函数的逆过程,将zip对象变成原先组合前的数据。

代码示例:

## *zip()函数
print('=*'*10 + "*zip()函数" + '=*'*10)
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
n = [[2, 2, 2], [3, 3, 3], [4, 4, 4]]
print("*zip(m, n)返回:\n", *zip(m, n))
m2, n2 = zip(*zip(m, n))
# 若相等,返回True;说明*zip为zip的逆过程
print(m == list(m2) and n == list(n2))

输出:

*zip(m, n)返回:
 ([1, 2, 3], [2, 2, 2]) ([4, 5, 6], [3, 3, 3]) ([7, 8, 9], [4, 4, 4])
 True

总结

本文完整示例:下载示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现将文本转换成语音的方法
May 28 Python
Python科学计算之Pandas详解
Jan 15 Python
Python存取XML的常见方法实例分析
Mar 21 Python
Python虚拟环境项目实例
Nov 20 Python
SVM基本概念及Python实现代码
Dec 27 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
Python常用模块logging——日志输出功能(示例代码)
Nov 20 Python
Python time库基本使用方法分析
Dec 13 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
python为什么会环境变量设置不成功
Jun 23 Python
python3中apply函数和lambda函数的使用详解
Feb 28 Python
python模仿网页版微信发送消息功能
Feb 24 #Python
python2.7读取文件夹下所有文件名称及内容的方法
Feb 24 #Python
python opencv之分水岭算法示例
Feb 24 #Python
python3爬取各类天气信息
Feb 24 #Python
python opencv之SIFT算法示例
Feb 24 #Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 #Python
python opencv之SURF算法示例
Feb 24 #Python
You might like
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
让Python代码更快运行的5种方法
2015/06/21 Python
python实现SMTP邮件发送功能
2020/06/16 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
实时获取Python的print输出流方法
2019/01/07 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Python安装Bs4的多种方法
2020/11/28 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
大学生个人实习的自我评价
2014/02/15 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
团购业务员岗位职责
2014/03/15 职场文书
税务职业生涯规划书范文
2014/09/16 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
党校毕业个人总结
2015/02/28 职场文书
公司处罚决定书
2015/06/24 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
2016年社区文体活动总结
2016/04/06 职场文书