浅谈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 相关文章推荐
PyMongo安装使用笔记
Apr 27 Python
python使用htmllib分析网页内容的方法
May 08 Python
python利用lxml读写xml格式的文件
Aug 10 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
Sep 25 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
利用nohup来开启python文件的方法
Jan 14 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
python函数定义和调用过程详解
Feb 09 Python
django有外键关系的两张表如何相互查找
Feb 10 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
python中类与对象之间的关系详解
Dec 16 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
Python实现的选择排序算法示例
2017/11/29 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
应聘医药代表职位求职信
2013/10/21 职场文书
文明学生事迹材料
2014/01/29 职场文书
岗位廉政承诺书
2014/03/27 职场文书
化工专业求职信
2014/07/01 职场文书
车辆年审委托书范本
2014/09/18 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
小学班主任教育随笔
2015/08/15 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python