Python中的zip()与*zip()函数详解
| 前言 |
- 实验环境: Python 3.6;
- 示例代码地址:下载示例;
- 本文中元素是指列表、元组、字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表)。
| 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
| 总结 |
- 本文完整示例:下载示例
- 能力有限,欢迎指错交流;
欢迎关注个人微信公众号WaltSmithML或新浪微博WaltSmith,本人主要方向为机器学习和深度学习。非常热烈欢迎一起交流学习哈,除了学习,还可免费帮忙download论文或者书籍哈==============
♥♥♥微信公众号♥♥♥♥♥♥
♥♥♥新浪微博♥♥♥
Python中的zip()与*zip()函数详解的更多相关文章
- Python中__init__.py文件的作用详解
转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...
- 基于python中staticmethod和classmethod的区别(详解)
例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object): def foo(self,x): print "executing foo ...
- Python中的__name__和__main__含义详解
1背景 在写Python代码和看Python代码时,我们常常可以看到这样的代码: ? 1 2 3 4 5 def main(): ...... if __name == "__m ...
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- 【转】angularjs指令中的compile与link函数详解
这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下 通常大家在 ...
- angularjs指令中的compile与link函数详解
这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下 通常大家在 ...
- python中验证码连通域分割的方法详解
python中验证码连通域分割的方法详解 这篇文章主要给大家介绍了关于python中验证码连通域分割的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需 ...
- python中赋值、浅拷贝、深拷贝详解(转)
一.赋值 >>> a = [1, 2, 3]>>> b = a>>> print(id(a), id(b), sep='\n')139701469 ...
- Python中防止sql注入的方法详解
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库.下面这篇文章主要给大家介绍了关于Python中 ...
- python中:from * import 与 import 详解
在python 中导入模块是我们最常用的功能,基本每个.py 文件中都会有 import 或者是 from * import 语句,可是,这两种方法有什么不同,有该怎么用?今天就好好分析一下. 先上定 ...
随机推荐
- MyEclipse里面如何把偏好设置导出
长时间使用Myeclipse,里面快捷键和代码风格以及其它设置都用习惯了,一旦需要重新安装,再次配置起来 就会很浪费时间,这里我们可以将自己的配置风格保留下来,下次重新安装时直接导入就可以了,不用再重 ...
- POJ 1228 (稳定凸包问题)
<题目链接> <转载于 >>> > 首先来了解什么是稳定的凸包.比如有4个点: 这四个点是某个凸包上的部分点,他们连起来后确实还是一个凸包.但是原始的凸包可 ...
- git一些实践命令,关于reabse和merge的区别在最后做了一个比较
git命令 一. 克隆,提交,拉取代码 1. 克隆,提交代码 git clone:远端仓库地址 git remote add upstream: 上游远端仓库地址(fork代码的原地址).添加上游远端 ...
- 零拷贝-zero copy
Efficient data transfer through zero copy Zero Copy I: User-Mode Perspective 0. 前言 在阅读RocketMQ的官方文档时 ...
- Luogu2570 [ZJOI2010]贪吃的老鼠 ---- 网络流
Luogu2570 [ZJOI2010]贪吃的老鼠 题面描述 https://www.luogu.org/problemnew/show/P2570 然后题意大概就是m只老鼠,然后吃n个奶酪,已知 ...
- DataGridView 绑定数据问题及修改值交换列
- loj#2016. 「SCOI2016」美味
题目链接 loj#2016. 「SCOI2016」美味 题解 对于不带x的怎么做....可持久化trie树 对于带x,和trie树一样贪心 对于答案的二进制位,从高往低位贪心, 二进制可以表示所有的数 ...
- 潭州课堂25班:Ph201805201 爬虫基础 第十一课 点触验证码 (课堂笔记)
打开 网易盾 http://dun.163.com/trial/picture-click ——在线体验——图中点选 打码平台 ——超级鹰 http://www.chaojiying.com/ ...
- 配置Spring的用于初始化容器对象的监听器
<!-- 配置Spring的用于初始化容器对象的监听器 --> <listener> <listener-class>org.springframework.web ...
- ADC分类及参数
ADC分类 直接转换模拟数字转换器(Direct-conversion ADC),或称Flash模拟数字转换器(Flash ADC) 循续渐近式模拟数字转换器(Successive approxima ...