浅谈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中urllib模块用法实例详解
Nov 19 Python
用Python实现通过哈希算法检测图片重复的教程
Apr 02 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 Python
Python在线运行代码助手
Jul 15 Python
Python 用Redis简单实现分布式爬虫的方法
Nov 23 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
TensorFlow数据输入的方法示例
Jun 19 Python
使用python获取电脑的磁盘信息方法
Nov 01 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
Python with语句和过程抽取思想
Dec 23 Python
Python 支持向量机分类器的实现
Jan 15 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实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
php实现json编码的方法
2015/07/30 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
Python实现约瑟夫环问题的方法
2016/05/03 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
python通过http下载文件的方法详解
2019/07/26 Python
python 使用shutil复制图片的例子
2019/12/13 Python
Pytorch释放显存占用方式
2020/01/13 Python
详解python itertools功能
2020/02/07 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
聊聊python中的循环遍历
2020/09/07 Python
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
优秀高中学生评语
2014/12/30 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python