浅谈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 win32 简单操作方法
May 25 Python
Python实现桶排序与快速排序算法结合应用示例
Nov 22 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
Django应用程序入口WSGIHandler源码解析
Aug 05 Python
Python解析多帧dicom数据详解
Jan 13 Python
Python 实现Image和Ndarray互相转换
Feb 19 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
Feb 25 Python
python-地图可视化组件folium的操作
Dec 14 Python
python 解决微分方程的操作(数值解法)
May 26 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 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侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
flash用php连接数据库的代码
2011/04/21 PHP
php中对2个数组相加的函数
2011/06/24 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
python、Matlab求定积分的实现
2019/11/20 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
自荐信怎么写呢?
2013/12/09 职场文书
医学类个人求职信范文
2014/02/05 职场文书
给老师的检讨书
2014/02/11 职场文书
合伙协议书范本
2014/04/21 职场文书
毕业生工作求职信
2014/06/30 职场文书
机电系毕业生求职信
2014/07/11 职场文书
出差报告范文
2014/11/06 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
导游词300字
2015/02/13 职场文书
管理失职检讨书范文
2015/05/05 职场文书
小英雄雨来观后感
2015/06/09 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书