浅谈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从MP3文件获取id3的方法
Jun 15 Python
详解python脚本自动生成需要文件实例代码
Feb 04 Python
python图书管理系统
Apr 05 Python
Python将图片转换为字符画的方法
Jun 16 Python
python 自动去除空行的实例
Jul 24 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
python 模拟银行转账功能过程详解
Aug 06 Python
Python socket模块方法实现详解
Nov 05 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
python:解析requests返回的response(json格式)说明
Apr 30 Python
python爬虫爬取某网站视频的示例代码
Feb 20 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采集腾讯微博的实现代码
2012/01/19 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
2015/06/10 PHP
php发送邮件的问题详解
2015/06/22 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
js仿微信抢红包功能
2020/09/25 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
Python用GET方法上传文件
2015/03/10 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
scrapy-splash简单使用详解
2021/02/21 Python
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
探亲邀请信范文
2014/01/30 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
表扬信格式模板
2015/05/05 职场文书
行政上诉状范文
2015/05/23 职场文书
公司业务员管理制度
2015/08/05 职场文书
解析Java中的static关键字
2021/06/14 Java/Android
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫
Pandas数据结构之Series的使用
2022/03/31 Python