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 语句,可是,这两种方法有什么不同,有该怎么用?今天就好好分析一下. 先上定 ...
随机推荐
- DP-hdu1260
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260 题目描述: 题目大意:每一个人去电影票买票,有两种买票方法:1.自己单人买:2.与前面的人一起买 ...
- FSMN结构快速解读
参考文献如下: (1) Feedforward Sequential Memory Neural Networks without Recurrent Feedback (2) Feedforward ...
- codeforces-1102e
https://www.cnblogs.com/31415926535x/p/10439313.html 这道题很锻炼思维,,是到好题,,就是我不在状态,,没看出来线段间的关系,,学会了求一个区间里相 ...
- 从字符集发展史看Unicode和UTF-8的区别
从字符集发展史看Unicode和UTF-8的区别 版权声明 本文并非本人原创,其内容来源于网络,本文根据其演绎而来,具体出出已经无法考证,在这里只好给出我所参考的连接. 知乎 https://www. ...
- SQL HAVING 子句使用
HAVING 对由sum或其它集合函数运算结果的输出进行限制. 比如,我们可能只希望看到Store_Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使用HAVING从 ...
- Maltego更新到4.1.6
Maltego更新到4.1.6 Maltego最近更新到4.1.6.由于Kali Linux软件源并没有提供此次更新包,用户需要进入Maltego进行手动更新.在起始页面中,双击状态栏右下角的黄色 ...
- JS的prototype和__proto__(含es6的class)
JS的prototype和__proto__(含es6的class) 一.prototype和__proto__的概念 prototype是函数的一个属性(每个函数都有一个prototype属性),这 ...
- HDU 4352 XHXJ's LIS 数位dp lis
目录 题目链接 题解 代码 题目链接 HDU 4352 XHXJ's LIS 题解 对于lis求的过程 对一个数列,都可以用nlogn的方法来的到它的一个可行lis 对这个logn的方法求解lis时用 ...
- pwcrack--一款集合多种md5解密的工具
项目开源地址:https://github.com/L-codes/pwcrack-framework Ruby2.5+ (tested with Ruby2.5.3 & Ruby 2.6.3 ...
- netty相关
https://my.oschina.net/jamaly/blog/272385两个客户端之间的交互 http://blog.csdn.net/a953713428/article/details/ ...