浅谈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 相关文章推荐
windows10系统中安装python3.x+scrapy教程
Nov 08 Python
Python解惑之整数比较详解
Apr 24 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
python求质数的3种方法
Sep 28 Python
python判断计算机是否有网络连接的实例
Dec 15 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
selenium 多窗口切换的实现(windows)
Jan 18 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
python热力图实现的完整实例
Jun 25 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实现验证码功能
2006/10/09 PHP
php实现多张图片上传加水印技巧
2013/04/18 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
php中cookie的使用方法
2014/03/29 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
python从子线程中获得返回值的方法
2019/01/30 Python
Python正则表达式学习小例子
2020/03/03 Python
python中setuptools的作用是什么
2020/06/19 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
Java语言程序设计测试题判断题部分
2013/01/06 面试题
个人四风问题对照检查材料
2014/10/01 职场文书
个人先进事迹总结
2015/02/26 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
预备党员转正意见
2015/06/01 职场文书
优秀教师工作总结2015
2015/07/22 职场文书