浅谈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 相关文章推荐
Pandas探索之高性能函数eval和query解析
Oct 28 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
使用python判断jpeg图片的完整性实例
Jun 10 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
pd.DataFrame统计各列数值多少的实例
Dec 05 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
Django中modelform组件实例用法总结
Feb 10 Python
python自动脚本的pyautogui入门学习
Apr 01 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
python工具——Mimesis的简单使用教程
Jan 16 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存储过程调用实例代码
2013/02/03 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
javascript some()函数用法详解
2014/11/13 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
jQuery select的操作实现代码
2009/05/06 Javascript
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
Python 性能优化技巧总结
2016/11/01 Python
python3操作mysql数据库的方法
2017/06/23 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
python最长回文串算法
2018/06/04 Python
python用post访问restful服务接口的方法
2018/12/07 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
jupyter 添加不同内核的操作
2021/02/06 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
国家励志奖学金获奖感言
2014/01/09 职场文书
制药工程专业个人求职自荐信
2014/01/25 职场文书
公司员工检讨书
2014/02/08 职场文书
农村党员干部承诺书
2015/05/04 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
Python实现视频自动打码的示例代码
2022/04/08 Python