Python学习笔记014——迭代工具函数 内置函数zip()
1 描述
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
也即:返回一个zip对象,此对象用于生成元组,此元组的个数由最小的可迭代对象决定
2 语法
zip([iterable/iterator, iterable/iterator, ...])
参数
iterable/iterator可以是迭代对象,也可以是迭代器
参数个数不限制,可以为一个,也可以是多个元素,
3 返回值
返回由元组为元素构成的对象——这是在python3中的现象
python3中的运行结果
>>> zip([1,2,3],[4,5,6]) <zip object at 0x7fcc3a709088>
python2中运行的结果
>>> a = zip([1,2,3],[4,5,6]) >>> a [(1, 4), (2, 5), (3, 6)] >>> print(a) [(1, 4), (2, 5), (3, 6)]
返回值的长度取决于元素中长度最短的那个对象
只有一个序列参数时,它返回一个1元组的列表。
names = ["中国移动", "中国电信", "中国联通"]
for x in zip( names):
print(x)
运行
('中国移动',)
('中国电信',)
('中国联通',)
4 实例
实例一:元素为迭代对象,迭代对象长度不一致
numbers = [10086, 10000, 10010, 95588]
names = ["中国移动", "中国电信", "中国联通"]
for x in zip(numbers, names):
print(x)
for x in zip(range(1,10000), numbers, names):
print(x)
运行
(10086, '中国移动') (10000, '中国电信') (10010, '中国联通') (1, 10086, '中国移动') (2, 10000, '中国电信') (3, 10010, '中国联通')
注解:当zip()函数中的迭代对象长度不一致时,zip()返回值中元素长度与最短长度一致
实例二 含有迭代器的元素对象
numbers = [10086, 10000, 10010, 95588]
names = ["中国移动", "中国电信", "中国联通"]
z1 = zip(numbers, names)
for x in z1:
print(x)
for x in zip(range(1,10000), iter(numbers), iter(names)):
print(x)
运行
(10086, '中国移动') (10000, '中国电信') (10010, '中国联通') (1, 10086, '中国移动') (2, 10000, '中国电信') (3, 10010, '中国联通')
实例三 含有迭代器的元素对象
numbers = iter([10086, 10000, 10010, 95588])
names = ["中国移动", "中国电信", "中国联通"]
z1 = zip(numbers, names)
for x in z1:
print(x)
for x in zip(range(1,10000), numbers, names):
print(x)
运行
(10086, '中国移动') (10000, '中国电信') (10010, '中国联通')
实例二和实例三中都使用了迭代器,而实际运行结果却相差较大,主要原因是迭代器的特点决定的,迭代器只能一直向后执行,不能后退;
在实例三中第一个for循环已经使用了迭代器numbers,所以再次执行时,不是从起始位置开始的,而是从上一个“指针”位置进行的。
为了更能说明问题,将代码修改进行
numbers = iter([11111, 10086, 10000, 10010, 22222, 33333, 44444, 55555, 66666,77777])
names = ["中国移动", "中国电信", "中国联通"]
print(next(numbers))
for x in zip(numbers, names):
print(x)
print(next(numbers))
for x in zip(range(1,10000), iter(numbers), names):
print(x)
运行结果
11111 (10086, '中国移动') (10000, '中国电信') (10010, '中国联通') 33333 (1, 44444, '中国移动') (2, 55555, '中国电信') (3, 66666, '中国联通')
这里面有一个问题一直没有解决,为什么zip()函数调用迭代器后,迭代器中“指针”跳过了元素22222,现在暂时没有找到原因。可能得在zip()源代码中找答案了。个人觉得在zip()函数中能不用迭代器就不用迭代器
实例四
a = [1, 2, 3]
b = [4, 5, 6]
for (x, y) in zip(a, b):
print(x,"*",y,"=", x * y)
运行
1 * 4 = 4 2 * 5 = 10 3 * 6 = 18
补充
numbers = [10086, 10000, 10010, 95588]
names = ['中国移动','中国电信','中国联通']
for x in zip(numbers,names):
print(x)
print("---------------------------")
for x in zip(range(1,1000),numbers,names):
print(x)
print("---------------------------")
for x,y,z in zip(range(1,1000),numbers,names):
print("x:",x,'y:',y,'z:',z)
运行
(10086, '中国移动') (10000, '中国电信') (10010, '中国联通') --------------------------- (1, 10086, '中国移动') (2, 10000, '中国电信') (3, 10010, '中国联通') --------------------------- x: 1 y: 10086 z: 中国移动 x: 2 y: 10000 z: 中国电信 x: 3 y: 10010 z: 中国联通
对于 for x,y,z in zip(range(1,1000),numbers,names): 变量不对应,出现过多或者过少均不行
例如
numbers = [10086, 10000, 10010, 95588]
names = ['中国移动','中国电信','中国联通']
for x,y in zip(range(1,1000),numbers,names):
print("x:",x,'y:',y)
运行
Traceback (most recent call last):
File "test.py", line 4, in <module>
for x,y in zip(range(1,1000),numbers,names):
ValueError: too many values to unpack (expected 2)
numbers = [10086, 10000, 10010, 95588]
names = ['中国移动','中国电信','中国联通']
for x,y,z,k in zip(range(1,1000),numbers,names):
print("x:",x,'y:',y,'z:',z)
运行
Traceback (most recent call last):
File "test.py", line 5, in <module>
for x,y,z,k in zip(range(1,1000),numbers,names):
ValueError: not enough values to unpack (expected 4, got 3)
Python学习笔记014——迭代工具函数 内置函数zip()的更多相关文章
- Python学习笔记014——迭代工具函数 内置函数enumerate()
1 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 2 语法 enumerate(sequ ...
- python学习笔记:第14天 内置函数补充和递归
一.匿名函数 匿名函数主要是为了解决一些简单需求而设计的一种函数,匿名函数的语法为: lambda 形参: 返回值 先来看一个例子: # 计算n的n次方 In[2]: lst = lambda n: ...
- python学习笔记(十六)内置函数zip、map、filter的使用
1.zip,就是把两个或者多个list,合并到一起,如果想同时循环2个list的时候,就使用zip.示例如下: l1 = ['a','b','c','e','f','g'] l2 = [,,] l3= ...
- python学习笔记:第13天 内置函数(一)
详细文件查看点击这里:详细地址
- 记录我的 python 学习历程-Day12 生成器/推导式/内置函数Ⅰ
一.生成器 初识生成器 生成器的本质就是迭代器,在python社区中,大多数时候都把迭代器和生成器是做同一个概念. 唯一的不同就是: 迭代器都是Python给你提供的已经写好的工具或者通过数据转化得来 ...
- 老男孩python学习自修第十一天【内置函数】
1.基本内置函数 help() 帮助文档 dir() 列出当前文件的所有变量和方法 vars() 列出当前文件的所有变量及其值 type() 返回变量的类型 id() 返回变量的内存地址 len() ...
- Python学习进程(15)常用内置函数
本节介绍Python的一些常用的内置函数. (1)cmp(x, y): cmp()函数比较 x 和 y 两个对象,并根据比较结果返回一个整数,如果 x<y,则返回-1:如果x&g ...
- sqlserver学习笔记(六)—— sqlserver内置函数(字符串、日期)
sqlserver中有很多内置函数,这里总结了一些常用的 一.关于字符串的函数: 1.CHARINDEX 寻找一个指定字符串在另一个字符串中的起始位置 SELECT CHARINDEX('world‘ ...
- python的学习笔记之——time模块常用内置函数
1.Python time time()方法 Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数). time()方法语法: time.time() 举例: #! ...
随机推荐
- 点云数据(point cloud) 【转】
转自caimagic的专栏 一:什么是点云数据 点云数据是指在一个三维坐标系统中的一组向量的集合.这些向量通常以X,Y,Z三维坐标的形式表示,而且一般主要用来代表一个物体的外表面形状.不经如此,除(X ...
- 渐进结构—条件生成对抗网络(PSGAN)
Full-body High-resolution Anime Generation with Progressive Structure-conditional Generative Adversa ...
- 使用C#创建及调用WCF完整实例 (Windows服务宿主)
关于WCF的概念.原理.优缺点等,在这里就不多说了,网上很多,可以自行搜索,比我解释的要专业的多. 这里直接说使用Windows 服务(Windows Service)作为宿主如何实现,其它方式不在此 ...
- 还原JavaScript的真实历史~
问题 ============ JavaScript真的继承自Cmm吗? JavaScript与Java有多少关系? JavaScirpt最初的设计是怎样的?在许多资料,JavaScript的语源被追 ...
- JavaScript操作XML(二)
上一篇介绍了XML的结构以及节点之间的关系这一篇介绍浏览器内建的XML解析器以及JavaScript是如何加载XML的. 大多数浏览器都有读取和操作 XML 的内建 XML 解析器. 解析器(XML ...
- Splunk的安装与使用
一.简单介绍 Splunk 是机器数据的引擎.使用 Splunk 可收集.索引和利用全部应用程序.server和设备(物理.虚拟和云中)生成的高速移动型计算机数据 .从一个位置搜索并分 ...
- JDBC具体解释(2)
1.载入驱动程序. 注冊驱动程序有多方法,Class.forName();是一种显式地载入.当一个驱动程序类被Classloader装载后,在溶解的过程中,DriverManager会注冊这个驱动类的 ...
- Android应用开发学习笔记之Fragment
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Fragment翻译成中文就是“碎片”.“片断”的意思,Fragment通常用来作为一个Activity用户界面的一 ...
- Mac下进行基于java服务端语言的微信公众号本地js-sdk调试的大致方法
开发微信公众号应用调用js-sdk,需要先在微信公众号后台配置可信域名,之后从微信的入口地址重定向到改域名下的路径后便会返回code,之后可以拿到一系列需要的参数等等.那么本地开发,如果使用的是PHP ...
- python 两个队列进行对比
python 两个队列进行对比 list01 = [1,2,3,4] list02 = [1,3,5] for i01 in list01: is_in_02 = False for i02 in l ...