浅谈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解析xml文件操作实例
Oct 05 Python
python简单的函数定义和用法实例
May 07 Python
Python2.x与Python3.x的区别
Jan 14 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 Python
zookeeper python接口实例详解
Jan 18 Python
深入理解Django自定义信号(signals)
Oct 15 Python
深入浅析Python2.x和3.x版本的主要区别
Nov 30 Python
python读取几个G的csv文件方法
Jan 07 Python
pyqt5实现登录界面的模板
May 30 Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 Python
python从内存地址上加载python对象过程详解
Jan 08 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
Apr 20 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
制作特殊字的脚本
2006/06/26 Javascript
用jscript实现新建word文档
2007/06/15 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
2016/09/14 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
JS通过位运算实现权限加解密
2018/08/14 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
python使用knn实现特征向量分类
2018/12/26 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
如何解决安装python3.6.1失败
2020/07/01 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
数控个人求职信范文
2014/02/03 职场文书
学习教师法的心得体会
2014/09/03 职场文书
python源码剖析之PyObject详解
2021/05/18 Python
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers