千家信息网

怎么理解Python的迭代器与zip

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要讲解了"怎么理解Python的迭代器与zip",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Python的迭代器与zip"吧!首先抛
千家信息网最后更新 2025年11月07日怎么理解Python的迭代器与zip

这篇文章主要讲解了"怎么理解Python的迭代器与zip",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Python的迭代器与zip"吧!

首先抛出一个困扰本人许久的问题:

nums = [1,2,3,4,5,6]numsIter = iter(nums)for _ in zip(*[numsIter]*3):    print(_)print(list(numsIter))

则控制台输出如何?

关于迭代器

1.对于支持迭代的集合对象,可以创建其迭代器对象。迭代器对象储存了可迭代对象的地址和遍历的位置,迭代器对象从集合的第一个元素开始访问,所有的元素被访问完迭代器被消耗(仍然占地址),但清空储存的信息(即地址和遍历位置)。使用list()函数或 * 操作符可以获取所有遍历的内容,结束后迭代器被消耗。

nums = [1,2,3,4,5,6]numsIter = iter(nums)print(nums)print(list(nums))print(nums)print(list(nums))

输出为:


[1,2,3,4,5,6]

[]

第二次键入 print(list(nums)) 时输出为空,因为迭代器对象已经找不到地址了。

2.复制迭代器对象,得到的是一个迭代器对象的引用,即地址,而不是新建一个迭代器。因此,遍历位置是共同的。

nums = [1,2,3,4,5,6]numsIter = iter(nums)numsIter_list = [numsIter] * 2print(numsIter)print(numsIter_list)for _ in numsIter_list:    print(next(_))

输出为:


[, ]
1
2

关于zip

1.在创建zip对象时,并没有直接生成新数据,而是存储了要操作对象的迭代器,当真正需要的时候,才通过迭代器遍历数据。因此,当使用list()函数或 * 操作符解压zip对象时,当然是会消耗掉储存的迭代器,使得再一次解压时返回为空。

P = [1,2,3]Q = [4,5,6]PQ_zip = zip(P,Q)print(PQ_zip)print(list(PQ_zip))print(list(PQ_zip))

输出为:


[(1, 4), (2, 5), (3, 6)]
[]

2.zip之所以能work,就是利用了迭代器储存的遍历位置,逐一地获取数据,直到其中一个迭代器被消耗掉。文首的问题就是最好的例子 。

nums = [1,2,3,4,5,6]numsIter = iter(nums)for _ in zip(*[numsIter]*3):    print(_)print(list(numsIter))

输出为:

(1, 2, 3)
(4, 5, 6)
[]

可以看见,实现的功能是把单行数据变成了3列2行。这是怎么做到的呢?执行zip时,依次访问三个同样的迭代器,每次访问,迭代器的遍历位置都会加1,于是第一轮结束后zip获取了(1,2,3),同理第二轮则获取了(4,5,6),随后迭代器被消耗。第三轮zip对象已经没有迭代器可用,于是结束执行。最后 print(list(numsIter)) 发现迭代器确实已经被消耗。

3.当使用 print 显示迭代器或zip对象的内容时,list() 和 * 操作符几乎没有区别。但上述例子中,只能用 * 操作符来实现,因为 * 操作符实际上是返回对象的地址和遍历位置,而 list() 会直接遍历完毕从而消耗掉迭代器。

nums = [1,2,3]numsIter = iter(nums)print(numsIter)for _ in zip(list(numsIter)*3):    print(_)print(list(numsIter))

输出为:


(1,)
(2,)
(3,)
(1,)
(2,)
(3,)
(1,)
(2,)
(3,)
[]

感谢各位的阅读,以上就是"怎么理解Python的迭代器与zip"的内容了,经过本文的学习后,相信大家对怎么理解Python的迭代器与zip这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

迭代 对象 消耗 输出 位置 地址 操作符 内容 数据 就是 问题 学习 例子 元素 函数 三个 三轮 之所以 信息 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全政府企业合作模式 数据库表添加数据打不上中文 网络安全管理考试难度 软件开发要怎么学 古籍普查平台导入数据库 高青企业软件开发 架设服务器提示网络通讯错误 北京语音网络技术分类服务标准 唐山国安网络技术有限公司 手机版2b2t服务器怎么下载 教育局组织开展网络安全工作 网络安全系统知识 daw软件开发需要的技术 常用数据库语言学什么 数据库中字符串和日期型数据 昆仑银行办卡数据库错误 服务器面临的风险 残余风险 网络安全小学生朗诵 网站服务器是什么意思 分离数据库在哪里 手机投屏软件开发 服务器网络安全关键部件 古籍普查平台导入数据库 2021世界互联网领先科技成果发布 花旗银行软件开发具体做啥 南关区资质网络安全质量服务 sql数据库mdf 软件企业软件开发环境证明 网络技术公司扣钱 网络安全管理工作总结
0