目录

1. zip()函数

1.1 zip()函数的用法

1.2 zip()函数的应用

1.3 *zip()的用法

2. itertools.izip()

3. itertools.zip_longest()


1. zip()函数

zip是Python的内置函数,通过help查看其使用方式如下:

help(zip)Help on built-in function zip in module __builtin__:zip(...)zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]

zip([seq1, ...])接受一系列可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。若传入参数的长度不等,则返回列表的长度和参数中长度最短的对象相同。

1.1 zip()函数的用法

查看具体使用方式:

①zip()函数单个参数

list1 = [1, 2, 3, 4]
tuple1 = zip(list1)
list2=list(tuple1)
print(tuple1) #<zip object at 0x0000021167002E08>
print(list2) #[(1,), (2,), (3,), (4,)]

当zip()函数有两个参数时:zip(a,b)。zip()函数分别从a和b依次各取出一个元素组成 元组,再将依次组成的元组组合成一个新的迭代器–新的zip类型数据,当a和b具有相同维数时,一一对应即可; 当a与b的维数不同时,取两者较小的维数,进行组合,多余的被舍去;

②zip()函数有2个参数

list1 = ["A", "B", "C", "D", "E"]  #len = 5
list2 = ["a", "b", "c", "d", "e"]  #len = 5
list3 = [1, 2, 3, 4]  #len = 4
print( list( zip(list1, list2) ) )  #[('A', 'a'), ('B', 'b'), ('C', 'c'), ('D', 'd'), ('E', 'e')]
print( list( zip(list1, list3) ) )  #[('A', 1), ('B', 2), ('C', 3), ('D', 4)]
#返回的元组的长度是所有输入序列中最短的

1.2 zip()函数的应用

利用zip()函数完成矩阵的点乘、相加和相减。

m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
n = [[2, 2, 2], [3, 3, 3], [4, 4, 4]]
#矩阵点乘
mat_pointmul = [ x * y for a, b in zip(m, n) for x, y in zip(a, b)]
print(mat_pointmul) #[2, 4, 6, 12, 15, 18, 28, 32, 36]
#矩阵相加,相减同理
mat_sum = [ x + y for a, b in zip(m,n) for x, y in zip(a, b)]
print(mat_sum)  #[3, 4, 5, 7, 8, 9, 11, 12, 13]

1.3 *zip()的用法

list1 = ["A", "B", "C", "D", "E"]  #len = 5
list2 = ["a", "b", "c", "d", "e"]  #len = 5
temp=zip(list1, list2)
#print(list(temp))  #[('A', 'a'), ('B', 'b'), ('C', 'c'), ('D', 'd'), ('E', 'e')]
#这句写了的话,后面  a,b = zip(*temp) 就报错 ValueError: not enough values to unpack (expected 2, got 0)
a, b = zip(*temp)
print(a,b) #('A', 'B', 'C', 'D', 'E') ('a', 'b', 'c', 'd', 'e')#或
print(list(zip(*zip(list1, list2)))) #[('A', 'B', 'C', 'D', 'E'), ('a', 'b', 'c', 'd', 'e')]#或
l1, l2 = zip(*zip(list1,list2))
print(l1,"\t",l2)  #('A', 'B', 'C', 'D', 'E')   ('a', 'b', 'c', 'd', 'e')
x=[5,6,7]
print([x])  #[[5, 6, 7]] [x]生成一个列表的列表,它只有一个元素x
print([x]*3)  #[[5, 6, 7], [5, 6, 7], [5, 6, 7]]
print(list(zip(* [x] * 3)))  #[(5, 5, 5), (6, 6, 6), (7, 7, 7)]
#zip(* [x] * 3)等价于zip(x, x, x)

2. itertools.izip()

izip()是属于itertools库的一个函数,在Python3中已经取消(AttributeError: module 'itertools' has no attribute 'izip')。

分析其功能后,可以清楚的知道为什么被取消。

内置函数zip()在Python2和Python3中有不同的返回对象,在Python2中zip()直接返回一个列表,在Python3中zip()返回一个迭代器。相对而言返回迭代器的速度要快很多。为此鄙人做了实验,但是运行Python2的时候,电脑被卡死,垃圾Python2。

Itertools.izip()就是返回一个迭代器。那么它在Python3中就失去了存在意义,所以被取消。Python3替代Python2是大势所趋,所以知道有这么个东西就够了。

3. itertools.zip_longest()

使用最长的迭代器来作为返回值的长度,并且可以使用fillvalue来制定那些缺失值的默。

import itertools
list1 = ["A","B","C","D","E"]  #len = 5
list2 = ["a", "b", "c", "d","e"]  #len = 5
list3 = [1, 2, 3, 4]  #len = 4

当参数长度一致时和zip一样。

temp = itertools.zip_longest(list1,list2)
print(temp)  #<itertools.zip_longest object at 0x00000243EB0128B8>
print(list(temp))  #[('A', 'a'), ('B', 'b'), ('C', 'c'), ('D', 'd'), ('E', 'e')]

当参数长度不一时,zip和较短的保持一致,itertools.zip_longest()和较长的保持一致。

print(list(itertools.zip_longest(list1, list3)))
#[('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', None)]
print(list(zip(list1, list3)))
#[('A', 1), ('B', 2), ('C', 3), ('D', 4)]

可以使用fillvalue来制定那些缺失值的默认值。

print(list(itertools.zip_longest(list1, list3,fillvalue = "克里马擦")))
#[('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', '克里马擦')]

如果错误,还望指正。

Python zip函数详解+和izip和zip_longest的比较辨析相关推荐

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

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

  2. Python hash函数详解

    Python hash函数详解 hash函数功能介绍 hash() 用于获取取一个对象(字符串或者数值等)的哈希值. hash函数的参数必须为不可变类型参数 ​ 因为hash值是唯一且不可变的,如果参 ...

  3. python map函数详解

    python map函数详解 python中有些内置的高阶函数,如map(),filter(),reduce():之所以称其为高阶函数,因为这类函数接受的参数中有一个参数为函数对象. map()函数格 ...

  4. python中zip什么意思_浅谈Python中的zip()与*zip()函数详解 python的zip函数加上一个*号,是什么含义...

    python 当中的zip( )函数到底是干嘛的?你越来越善解人意,就没人在意你的委屈和脾气. zip([1,2,3],['a','b','c']) 结果是 [(1, 'a'), (2, 'b'), ...

  5. python input函数详解_对Python3中的input函数详解

    下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函 ...

  6. python average函数详解_python基础之函数详解

    Python基础之函数详解 一.函数的定义 到现在为止,我们已经掌握了Python的基本语法和数据类型等相关基础知识了,以进行一个项目的编写了,这个时候,就会发现,很多代码需要我们进行复制粘贴,这简直 ...

  7. python中的zip函数详解_python中的 zip函数详解

    python中zip()函数用法举例 定义:zip([iterable, ...]) zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple ...

  8. python中zip函数详解_Python中zip函数用法

    看openstack的代码,遇到一个内建函数zip不明白其意思: # Adjust the weights in the grid by the functions weight adjustment ...

  9. Python内置函数zip()函数详解

    功能:zip 函数是可以接收多个可迭代对象,然后把每个可迭代对象中的第i个元素组合在一起,形成一个新的迭代器,类型为元组. 参数:*iterables,任意个的 可迭代对象 返回值:返回一个元组的迭代 ...

最新文章

  1. OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法
  2. linux 磁盘分区情况6,Linux磁盘分区介绍
  3. 清除messages
  4. Run service in specified proxyPort via jettyrun
  5. Kubernetes-标签和注解(二十二)
  6. Java基础----JAVA语言的概述和开发环境的搭配
  7. 使用.Net Core MVC创建Web API
  8. 问题十五:C++中抽象类,虚函数是什么鬼?怎么测试
  9. mysql 递归查询所有父级
  10. HTTP数据传输机制的演变:从0.9到3.0
  11. 如何关闭135,139,445高危端口
  12. css基础知识 -- 颜色渐变
  13. 关于4418开发和6818开发
  14. MFC对话框/控件下属性中的事件变成空白?
  15. [转]Java咖啡馆---叹咖啡
  16. Xdebug中文文档-基础特性
  17. 处理:“ORA-00257: archiver error. Connect internal only, until freed”的错误问题
  18. 利用Python3四舍五入保留两位小数
  19. 电工学习笔记————常用PCB专业术语合集
  20. LINQ To SQL與Transaction

热门文章

  1. 深入浅出C++左值引用,右值引用,移动语义。
  2. php延迟重定向,重定向 – Nginx Php-fpm的延迟问题
  3. 迁移学习(自我归纳总结)
  4. MSP430F5529库函数定时器A——捕获实验
  5. 计算机影响我们生活的调查报告,《计算机对大学生日常生活的带来影响》调查报告word模板.doc...
  6. 785nm 600mW 稳波长窄线宽光纤输出半导体激光器模块 YM600NU-785-105FC-PC产品资料
  7. 【Vapor】07 Chapter 9: Parent-Child Relationships
  8. 斜率、弧度、角度相互转化
  9. 浅谈数据治理、数据管理、数据资源与数据资产管理内涵及差异点(建议收藏)...
  10. Cisco PT案例一:为交换机配置并连接TELNET