Python常用迭代器操作图解

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
  • map() 将一个函数应用于可迭代对象的每个元素,并返回结果列表。
  • filter() 使用指定的函数过滤可迭代对象的元素,并返回满足条件的元素组成的迭代器。
  • enumerate() 返回一个由索引和元素组成的元组的迭代器,常用于同时遍历索引和元素。
  • zip() 将多个可迭代对象的对应元素打包成元组的迭代器。
  • itertools.zip_longest()zip() 类似,但在处理不等长的可迭代对象时,会使用填充值填充缺失的元素。
  • itertools.tee() 复制可迭代对象的内容,生成两个相互独立的迭代器。
  • itertools.groupby() 用于对可迭代对象进行分组。它会返回一个由分组键和对应的迭代器组成的迭代器。

map()

map.png

scss
复制代码
li = [1, 2, 3]

# mapped_li 是一个 map object(Iterable) 而不是list
mapped_li = map(lambda x: str(x), li) 

# 若要变为list,则需要转换
mapped_list_li = list(mapped_li) # ['1', '2', '3']

# map操作可用生成器表达式代替,更清晰
mapped_li = [str(x) for x in li] # ['1', '2', '3']

filter()

filter.png

ini
复制代码
li = [1, 2, 3]

# filtered_li 是一个 filter object(Iterable) 而不是list
filtered_li = filter(lambda x: x == 1, li) 

# 若要变为list,则需要转换
filtered_list_li = list(filtered_li) # [1]

# filter操作可用生成器表达式代替,更清晰
filtered_li = [x for x in li if x == 1] # [1]

enumerate()

emu.png

css
复制代码
li = [5, 2, 0]

for i, x in enumerate(li):
 print(i, x)

# 0 5
# 1 2
# 2 0

enumerate([5, 2, 0]) 可以理解为 ((0, 5), (1, 2), (2, 0)) ,即 ((index, value), ...) 不过实际上这并不是一个元组,而是一个 enumerate object

zip()

zip.png

ini
复制代码
li1 = [1, 2, 3]
li2 = [4, 5, 6]
li3 = [7, 8, 9]

zipped_li = zip(li1, li2, li3) # 同理,并不是list,而是zip object
zipped_list_li = list(zipped_li) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

for x, y, z in zip(li1, li2, li3):
 ...
 
# 举例
students = ['小左', '小瑞', '小海']
schools = ['清华', '北大', '复旦']
homes = ['小左家', '小瑞家', '小海家']

for stu, school, home in zip(students, schools, homes):
 print(f'{stu}是{school}的学生,他在{home}')
 
# 小左是清华的学生,他在小左家
# 小瑞是北大的学生,他在小瑞家
# 小海是复旦的学生,他在小海家

itertools.zip_longest()

zip_longest.png

ini
复制代码
from itertools import zip_longest

li1 = [1, 2, 3]
li2 = [5, 6]
li3 = [9]

# 同理,并不是list,而是zip_longest object
zipped_li = zip_longest(li1, li2, li3, fillvalue=0) 
zipped_list_li = list(zipped_li) # [(1, 5, 9), (2, 6, 0), (3, 0, 0)]

itertools.tee()

tee.png

ini
复制代码
from itertools import tee

li = [1, 2, 3]

li1, li2 = tee(li)

list_li1 = list(li1) # [1, 2, 3]
list_li2 = list(li2) # [1, 2, 3]

itertools.groupby()

less
复制代码
from itertools import groupby

data = [('A', 1), ('A', 2), ('B', 3), ('B', 4), ('B', 5)]

for key, group in groupby(data, key=lambda x: x[0]):
    print(key, list(group))

# A [('A', 1), ('A', 2)]
# B [('B', 3), ('B', 4), ('B', 5)]

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

CSDN大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

全面理解Python中的迭代器 迭代是一种重复获取数据集合中元素的过程,一次只获取一个元素,直到遍历完所有元素。在Python中,迭代通常用于遍历序列(如列表、元组)或任何可迭代对象。自定义迭代器允许我们创建自己的数据结构并以迭代方式访问其内容。在Python中,最常见的方式是通过生成器函数来实现。生成器函数是一种特殊的迭代器,使用yield语句暂停和恢复函数的执行。# 使用自定义迭代器print(num)itertools模块包含了许多有用的迭代器函数,如count()cycle()chain()等。例如,count()break。 阅读详情

相关推荐

Python高级语法】——迭代器 (Iterator)

迭代器是访问集合的一种方式,可以记住遍历位置的对象,迭代器从集合的第一个元素开始访问,直到所有的元素被访问完才结束,只能往往前,不能后退。

Python全栈系列 2万+

Python迭代器(Iterator)

iter1.凡是可作用于 for循环的对象都是 Iterable 类型;2.但是可作用于 next()函数的对象都是 Iterator 类型;3.集合数据类型如 list、dict、str 等是 Iterable 但不是 Iterator, 不过可以通过 iter() 函数获得一个 Iterator 对象。

weixin_45068714的博客 6689

python 多装饰器在类上_Python迭代器(三十五)

迭代器是可以迭代的对象。 在本教程中,您将了解迭代器的工作原理,以及如何使用__iter__和__next__方法构建自己的迭代器迭代器Python中无处不在。 它们优雅地实现在循环,推导,生成器等中,但隐藏在明显的视觉中。Python中的迭代器只是一个可以迭代的对象。一个将一次返回数据的对象或一个元素。从技术上讲,Python迭代器对象必须实现两个特殊的方法__iter__()和__next...

weixin_39761822的博客 283

python中的迭代器的使用

Python中,迭代器(Iterator)是一个特殊对象,它实现了迭代协议,允许程序员遍历集合元素而无需暴露其底层表示。例如,列表、元组、字符串、字典、集合以及自定义类(如果它们实现了迭代器协议)都是可迭代的。每次对__next__()方法的调用都会返回下一个数,并且当达到或超过max_value时,会触发StopIteration异常,这标志着迭代的结束。下面,我们实现一下自己的迭代器,该类需要实现__iter__()和__next__()两个特殊方法(魔法方法),以遵循Python迭代器协议。

semicolon_hello的专栏 768

图解 Python 编程(19) | 迭代器与生成器(附要点速查表·完结)

迭代器(iterator)是一个带状态的对象,在调用next()方法时返回容器中的下一个值。生成器(generator)是使用 yield 的函数,函数被调用时会返回一个生成器对象。生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。...............

ShowMeAI研究中心 1万+

迭代器和生成器

不管是生成器还是我们的容器,最终都是迭代器,使用next方法进行有规律的获取元素,不需要将元素都加载到内存进而节省资源利用

weixin_45336222的博客 790

Python进阶 - 迭代器的基本概念 可迭代对象与迭代器的区别

Python迭代器与可迭代对象解析 本文深入讲解了Python中可迭代对象(Iterable)与迭代器(Iterator)的核心区别: 1️⃣ 可迭代对象(如list/dict/str)实现__iter__()方法,支持for循环但不支持直接next()调用; 2️⃣ 迭代器(如生成器/map对象)额外实现__next__()方法,具有状态记忆功能,遍历一次即耗尽; 3️⃣ 关键转换函数iter()可将可迭代对象转为迭代器; 4️⃣ 揭示了for循环底层通过iter()+next()+StopIterati

千淘万漉虽辛苦,吹尽狂沙始到金 6341

LeetCode第284题_顶端迭代器

LeetCode 284题解析:顶端迭代器设计 本文解析了LeetCode第284题"顶端迭代器"的设计实现。题目要求在现有迭代器接口基础上扩展peek()功能,允许查看下一个元素而不移动指针。文章提供了C#、Python和C++三种语言的实现方案,均采用缓存机制来保存下一个元素的值,确保peek()操作不影响迭代器状态。 关键实现要点包括: 初始时缓存第一个元素 peek()直接返回缓存值 next()返回缓存并更新为下一个元素 hasNext()检查缓存是否存在 三种实现均保持了O(

qq_40263592的博客 1214

Python 可迭代对象、迭代器、生成器

Python中的可迭代对象、迭代器和生成器是密切相关的概念。可迭代对象(如列表、字符串)实现了__iter__()方法,可被多次遍历;迭代器则通过__next__()方法记录遍历状态,只能遍历一次;生成器是特殊的迭代器,使用yield关键字实现延迟计算和状态保存。三者关系为:可迭代对象→迭代器→生成器。生成器最适合处理大数据流,能显著节省内存。关键区别在于:可迭代对象无状态可重复遍历,迭代器和生成器有状态且一次性使用,生成器通过yield实现更简洁的迭代器创建方式。

weixin_43692357的博客 747

Python中的可迭代对象、迭代器和生成器的异同点

最近在学Python里异步IO中的协程,协程最初是由生成器变形的yield而来,感觉学完理解有些困难,故此再来回顾一下之前学习的生成器。在Python学习之初比较容易混淆可迭代对象、迭代器和生成器。因此,做以总结以辨析其中关键的区别。以下仅为习后个人理解,如有偏差,还请指出! Talk is cheap,show me the picture! 解释之前,我们先来看一张概览图,下面是一张关于容...

SL_World的博客 6500

LeetCode第281题_锯齿迭代器

本文解析LeetCode第281题"锯齿迭代器",要求交替返回两个向量中的元素。提供了队列法和指针法两种解决方案,包含C#、Python、C++三种语言实现。文章详细图解了迭代过程,对比了不同方法的性能,并分析了常见错误。该题考察迭代器设计能力,适合中级开发者学习数据结构应用。 核心要点: 两种解法:队列法(优雅易扩展)和指针法(高效省空间) 时间复杂度O(1),空间复杂度O(1) 需注意空向量处理和索引边界条件 相关题目链接提供进阶学习资源 推荐给想提升迭代器设计能力的学习者,可结合图

qq_40263592的博客 1256

图解Python编程:从入门到精通系列教程(附全套速查表)

Python 是一门开源免费、通用型的脚本编程语言,它上手简单,功能强大,它也是互联网最热门的编程语言之一。这套Python基础教程不同于其他文字版教程,我们以最直挂的「图示」对每个内容和关键点「可视化」,配以最精准精简的代码,让大家尽快入门。......

ShowMeAI研究中心 3万+

别再混淆了!Python迭代器 vs 可迭代对象:一张图说清所有关系

一张图讲清Python迭代器与可迭代对象区别,帮你彻底理解两者关系与转换机制。涵盖iter()、next()核心方法,适用for循环、生成器等场景,理清概念更高效编程。值得收藏

FuncLens的博客 663

Python进阶 - 迭代器的遍历 手动调用next方法与StopIteration异常

Python迭代器遍历机制解析 本文深入探讨了Python迭代器的核心原理,重点分析了手动调用next()方法与StopIteration异常的交互机制。主要内容包括: 迭代器本质:通过实现__iter__()和__next__()方法,迭代器可以逐个返回元素,直到抛出StopIteration表示终止。 next()方法: 核心功能是推进迭代器状态 可配合default参数避免异常 示例展示了手动遍历列表的过程 StopIteration: 作为迭代终止的正常信号 建议使用try-except捕获处理

千淘万漉虽辛苦,吹尽狂沙始到金 6539

迭代器模式

面向对象编程思想以来,程序员们将常见的面向对象编程范式总结起来,就形成了23种设计模式,因为是适用于面向对象编程思想的,所以设计模式种最本质的核心就是继承、接口、封装、高内聚和低耦合的思想。所以在了解设计模式的过程中,多多思考这几个方面,可以帮助大家更好的理解它们。废话不多说,下面就开始介绍迭代器模式本次的介绍,借鉴了图灵书籍《图解设计模式》(结城浩·著),示例基本一致;如果大家有兴趣,可以直接阅读该书迭代器模式最主要的用途是方便我们进行遍历访问;

weixin_43500200的博客 143

python基础梳理(十九)迭代器、生成器以及迭代工具函数(zip、enumerate)

一、迭代器 Iterator 和 生成器 Generator 1.什么是迭代器迭代器是访问可迭代对象的一种方式,用迭代器可以访问可迭代 迭代器是指iter(可迭代对象)返回的对象 迭代器可以用next(it)函数获取可迭代对象中的数据 2.迭代器相关的函数 1)iter(iterable) 从可迭代对象中返回一个迭代器,iterable必须是能提供一个迭代器的对象 2)next(ite...

KingOfMyHeart的博客 1001

Python核心编程的四大神兽:迭代器、生成器 、闭包以及装饰器

生成器生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值;在下一次调用该函数执行时,程序将从上一次暂停的位置继续往下执行。 通过一个例子来理解生成器的执行过程。求1-10的所有整数的立方并将结果打印输出,正常使用列表的实现如下: def lifang_ls(): """求1-10所用整数的立方数-列表方式实现""" ls = [] for i in range(1,11..

python588的博客 230

Python核心编程的四大神兽:迭代器、生成器 、闭包以及装饰器_用一个生成器函数依次产生1-20的立方

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

2401_84561461的博客 714

Python编程四大神兽:迭代器、生成器、闭包和装饰器

生成器 生成器是生成一个值的特殊函数,它具有这样一个特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值;在下一次调用该函数执行时,程序将从上一次暂停的位置继续往下执行。 例子:求1-10的所有整数的立方并将其结果打印输出,正常使用列表的实现如下: def lifang_ls(): ls = [] for i i...

weixin_30509393的博客 138
上一篇: Python 和 Go :简单了解
下一篇: Python 虚拟环境 venv
AI大模型学习
博客等级 码龄4年 2373粉丝 620原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值