您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

浅谈Python中的zip()与*zip()函数详解

5b51 2022/1/14 8:15:06 python 字数 6864 阅读 270 来源 www.jb51.cc/python

前言 1.实验环境:Python3.6; 2.示例代码地址:下载示例; 3.本文中元素是指列表、元组、字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表)。

概述

前言

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,3],[4,5,6],[7,8,9]]
 n = [[2,2],[3,4,4]]
 p = [[2,]

zip(m,n)将返回([1,[2,2]),([4,3]),([7,9],4])

zip(m,p)将返回([1,3])

代码示例:

## zip()函数有2个参数
m = [[1,9]]
n = [[2,4]]
p = [[2,3]]
# 行与列相同
print("行与列相同:\n",list(zip(m,n)))
# 行与列不同
print("行与列不同:\n",p)))

输出

行与列相同:
 [([1,4])]
行与列不同:
 [([1,3])]

zip()函数的应用

矩阵相加减、点乘

也可以使用for循环+列表推导式实现;

m = [[1,4]]
## zip()应用
# 矩阵相加减、点乘
m = [[1,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)])

输出

[2,6,12,15,18,28,32,36][3,7,9,11,13]

*zip(*iterables)函数详解

zip(iterables)函数

*zip()函数是zip()函数的逆过程,将zip对象变成原先组合前的数据。

代码示例:

## *zip()函数
print('=*'*10 + "*zip()函数" + '=*'*10)
m = [[1,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]) ([4,3]) ([7,4])
 True

总结

本文完整示例:下载示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是编程之家为你收集整理的浅谈Python中的zip()与*zip()函数详解全部内容,希望文章能够帮你解决浅谈Python中的zip()与*zip()函数详解所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶