浅谈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中的文档测试模块
Apr 28 Python
python实现指定字符串补全空格的方法
Apr 30 Python
Python使用django获取用户IP地址的方法
May 11 Python
用Python设计一个经典小游戏
May 15 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
Feb 05 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
python多维数组分位数的求取方式
Mar 03 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 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
基于文本的留言簿
2006/10/09 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
php利用事务处理转账问题
2015/04/22 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
敬老院活动总结
2014/04/28 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
英文邀请函
2015/02/02 职场文书
上学路上观后感
2015/06/16 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
股东协议书范本2016
2016/03/21 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫
Python数组变形的几种实现方法
2022/05/30 Python
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL