python中zip的使用_浅谈Python中的zip()与*zip()函数详解

前言

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()函数的返回类型:

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中的zip()与*zip()函数详解

本文地址: http://www.cppcns.com/jiaoben/python/221063.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

奥的斯电梯tt服务器使用表_奥的斯电梯服务器TT使用说明1

目录一、TT介绍............................................................................................................... 3二、OTIS TT插头各针脚说明................................................................................................. 4三、T…

python安装提示缺少dll_解决Python安装时报缺少DLL问题【两种解决方法】

准备开始学习Python,但是刚准备环境搭建时就遇到了下面的错误:仔细的看了看,说是缺少DLL。对于这个问题的解决办法:方法一:1. 在安装包上点右键以管理员身份运行2. C:\Users\用户名\AppData\Local\Temp 文件夹上右键-&…

影像科dsa为什么必须买维修保险_了解什么是DSA,看这篇就够了

相对于超声、CT、磁共振等,DSA可能对大部分人而言都是比较陌生的,目前国内DSA市场基本都是进口品牌主导,国内能生产这种医疗设备的屈指可数,也就是说,目前我们在医院看到的DSA设备基本都来自"GPST"等进口厂商…

python tkinter下载器_下载小说还要去找网站?Python使用tkinter打造一个小说下载器...

前言今天教大家用户Python GUI编程——tkinter 打造一个小说下载器,想看什么小说,就下载什么小说先看下效果图Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口。作为 python 特定的GU…

python while循环if_20170403Python控制流if、while、for语句学习

控制流if、while、for语句学习if elif else语句if语句是一种最常见的控制流语句类型。它用于判断一个条件,如果为True,则执行紧跟其后的代码块。一条if语句可以跟上一个或多个elif块以及一个“滴水不漏”的else块(如果所有条件都为False)。if ... :Print…

审计日志_Oracle审计日志过大?如何清理及关闭审计机制?

概述oracle 11g推出了审计功能,但这个功能会针对很多操作都产生审计文件.aud,日积月累下来这些文件也很多,默认情况下,系统为了节省资源,减少I/0操作,其审计功能是关闭的。这段时间发现审计占了比较多空间&…

windows7 python 指定源组播 10049_Python3组播通信编程实现教程(发送者+接收者)

一、说明1.1 标准组播解释通信分为单播、多播(即组播)、广播三种方式单播指发送者发送之后,IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式,比如你现在与web服务器通信就是单播形式广播指发送者发送之后,IP数据包被路由器发给与其连…

servlet如何使用session把用户的手机号修改_SpringBoot源码学习系列之嵌入式Servlet容器...

1、前言简单介绍SpringBoot的自动配置就是SpringBoot的精髓所在;对于SpringBoot项目是不需要配置Tomcat、jetty等等Servlet容器,直接启动application类既可,SpringBoot为什么能做到这么简捷?原因就是使用了内嵌的Servlet容器&…

mybatisplus新增返回主键_第17期:索引设计(主键设计)

表的主键指的针对一张表中的一列或者多列,其结果必须能标识表中每行记录的唯一性。InnoDB 表是索引组织表,主键既是数据也是索引。主键的设计原则1. 对空间占用要小上一篇我们介绍过 InnoDB 主键的存储方式,主键占用空间越小,每个…

mysql 集群与主从_Mysql集群和主从

1、Mysql cluster: share-nothing,分布式节点架构的存储方案,以便于提供容错性和高性能。需要用到mysql cluster安装包,在集群中的每一个机器上安装。有三个关键概念:Sql节点(多个),数据节点(多个),管理节点(一个)&…

python四则运算_四则运算 python

java转换json需要导入的jar包,org/apache/commons/lang/exception/NestableRuntimeException缺少相应jar包都会有异常,根据异常找jar包导入...... 这里我说下lang包,因为这个包我找了好半天: 我用的是: commons-lang…

mysql 字段排重_MySQL 根据单个、多个字段排重

情景是这样的 首先我们业务需要 在一张流水表中需要进行流水的记录 这个记录是从别的平台拉过来的数据 但是他们数据无唯一约束 即流水这样就很有可能出现单条数据重复的问题所以这种情况 用join的话 效率可能不是很大 所以就写了以下sql注意 排重后还需保留一个唯一有效的记录…

python开发框架 代码生成_我的第一个python web开发框架(31)——定制ORM(七)...

几个复杂的ORM方式都已介绍完了,剩下一些常用的删除、获取记录数量、统计合计数、获取最大值、获取最小值等方法我就不一一详细介绍了,直接给出代码大家自行查看。1 #!/usr/bin/env python2 #codingutf-834 from common importdb_helper567 classLogicBa…

mysql里边字符函数_mysql函数(一.字符函数)

一.字符函数1.LENGTH(str)字符长度函数:一个汉字为三个字符(1)查看某字符串的长度(比如名字)select LENGTH(sunchuangye); 结果:11(2)根据字符长度进行倒序(比如名字)select id,userName FROM t_user ORDER BY LENGTH(userName) DESC;2.CONCAT(str1,s…

redis缓存原理与实现_基于Redis实现范围查询的IP库缓存设计方案

点击上方“码农沉思录” 发现更多精彩我先说下结果。我现在还不敢放线上去测,这是本地测的数据,我4g内存的电脑本地开redis,一次都没写完过全部数据,都是写一半后不是redis挂就是测试程序挂。可以肯定的是总记录数是以千万为单位…

linux mysql提示1045_linux mysql ERROR 1045

介绍了一下安装MySQL后登陆MySQL时会遇到ERROR 1045 (28000): Access denied for user rootlocalhost (using password: NO) 这个错误,当时不知道真正的原因,搜索了一些网上的资料,测试验证了如何解决这个问题,但是一直不知道具体…

mysql原生库_Mysql数据库的一些简单原生sql语句

原生sql语句查询:select * from 表名 :查找表内所有数据, * 代表所有where 具体条件 :where作位查询sql语句条件,例 select * from 表名 where 字段名指定值order by 升降序:与desc和asc使用,通常以int类型字段进行升…

有向图生成树是如何画的_漫画:什么是最小生成树?

作者 | 小灰来源 | 程序员小灰————— 第二天 —————————————————首先看看第一个例子,有下面这样一个带权图:它的最小生成树是什么样子呢?下图绿色加粗的边可以把所有顶点连接起来,又保证了边的权值之和最小&a…

python经济_python生成器——懒到欠揍,但很经济

生成器的特点是工作到一半,就会停下来看别人干活直至有人踢它屁股,这时它才继续往下干活。实现这一功能的精髓要用到yield。生成器是一种特殊的迭代器,因此我们先来了解一下什么是迭代器。我们都知道著名的斐波那契数列:1、1、2、…

ue默认高亮mysql_UE设置打开文件的默认高亮语言

最近使用UE时,需要频繁地打开.ec文件,.ec文件参照的是C/C的语法,每次打开时,都需要在工具栏上点击“查看方式->C/C”。觉得很繁琐,于是想查找一下设置,让UE打开.ec文件时,默认使用的C/C语法高…