12个好玩又实用的Python迭代器和生成器实例

图片

大家好!今天我们要来一场编程奇趣之旅,一起揭秘那些既让代码变得更简洁高效,又能带你领略Python魅力的12个迭代器和生成器实例。别担心,我会用轻松易懂的语言帮你掌握这些小技巧,准备好你的笔记本,咱们这就开始!

1. 简单迭代器 - enumerate这个小家伙就像一个自动编号机,它能给序列中的每个元素配上索引。想象一下,你正在数一串葡萄,每次取出一颗并告诉你这是第几颗——这就是enumerate干的事儿!

fruits = ['apple', 'banana', 'cherry']
for i, fruit in enumerate(fruits):print(f"{i + 1}. {fruit}")

2. 奇妙的无限迭代器 - itertools.count想要一个永不停歇的计数器?itertools.count()可以办到!启动它就仿佛开启了时光隧道,不断递增永不终止。

from itertools import count
infinity = count(1)
print(next(infinity))  # 输出: 1
print(next(infinity))  # 输出: 2
# ... 可以一直next下去 ...

3. 连接迭代器 - itertools.chain多个序列无缝拼接?交给chain处理!它能把几个序列像乐高积木一样拼在一起。

from itertools import chain
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
combined = chain(list1, list2)
for item in combined:print(item)

4. 筛选专家 - filter需要过滤出序列中满足特定条件的元素?filter是个贴心的筛选员,只保留“符合条件”的数据。

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
for num in even_numbers:print(num)

5. 生成器表达式 - (x for x in range(10))这是一个轻量级版本的列表推导式,但它更节省内存。在幕后默默工作,按需产生数值。

odd_gen = (x for x in range(10) if x % 2 != 0)
for odd in odd_gen:print(odd)

6. 动态生成斐波那契数列 - 生成器函数利用生成器特性创建斐波那契数列,只计算你需要的项,而不一次性生成所有值。

def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + bfib = fibonacci()
for _ in range(10):print(next(fib))

7. 按需取子序列 - islice不改变原序列的情况下抽取部分序列?itertools.islice是你的好帮手。

from itertools import islice
long_list = [i for i in range(20)]
short_list = list(islice(long_list, 5, None, 2))
print(short_list)

8. 组合排列大法 - combinations 和 permutations要玩转组合排列游戏吗?itertools.combinationsitertools.permutations帮你快速找出所有可能。

from itertools import combinations, permutations
letters = ['A', 'B', 'C']
combos = combinations(letters, 2)
perms = permutations(letters, 2)
print(list(combos))  # 输出所有组合
print(list(perms))   # 输出所有排列

9. 分组高手 - groupby当序列中有规律地分组时,itertools.groupby能帮你迅速识别并分离这些组。

from itertools import groupby
data = ['apple', 'apple', 'banana', 'apple', 'orange', 'banana']
grouped_data = groupby(data)
for key, group in grouped_data:print(key, list(group))

10. 阶乘生成器用生成器实现阶乘计算,优雅且避免大整数溢出问题。

def factorial_gen(n):result = 1for i in range(1, n + 1):result *= iyield resultfor fact in factorial_gen(5):print(fact)

11. 文件行迭代器 - open(...).readlines()无需一次性加载整个文件,逐行读取文件内容就是这么简单。

with open('my_file.txt', 'r') as file:for line in file.readlines():process_line(line)

12. 自定义迭代器类 - __iter__ 和 __next__ 方法当你需要自己设计一个迭代器时,只需定义这两个特殊方法,赋予对象迭代能力。

class CustomIterator:def __init__(self, limit):self.current = 0self.limit = limitdef __iter__(self):return selfdef __next__(self):if self.current >= self.limit:raise StopIterationelse:current_value = self.currentself.current += 1return current_valuecustom = CustomIterator(5)
for value in custom:print(value)

瞧,通过这12个生动有趣的例子,我们展示了Python迭代器和生成器如何让编程变得既好玩又实用。下次编写代码时,不妨试试它们,让你的程序更加智能和高效吧!

文末福利/每周赠书

活动详情链接:每周赠书活动第一期--ChatGPT 实操应用大全

更多粉丝福利,关注下方公众号获取

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

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

相关文章

Vue3 + Vite + TS + Element-Plus + Pinia项目整理(2)

1、清空App.vue文件内容&#xff0c;替换成下面 <template><router-view></router-view> </template> 2、清空style.css文件内容&#xff0c;替换成下面内容 *{margin: 0;padding: 0;list-style: none;text-decoration: none;outline: none;box-siz…

MySQL 练习三

select sname,sex,class from student;select distinct depart from teacher;select * from student;select * from score where degree between 60 and 80;select * from score where degree in(85,86,88);select * from student where class’95031’ or sex’女’;select * …

RAG( Retrieval Augmented Generation)简单实现

RAG基础知识: https://python.langchain.com/docs/use_cases/question_answering/ 本文主要讲解通过Langchain 和Ollama这2个工具实现RAG。 Langchain: https://python.langchain.com/docs/get_started/introduction Ollama: https://ollama.com/ 先简单理清一下RAG, Langc…

transductive transfer learning

如图所示&#xff0c;传统的机器学习方法尝试去学习每一种任务&#xff0c;而迁移学习则根据已经学习处理过的任务推广到有较少训练数据的新任务上。在传统的机器学习中&#xff0c; transductive learning指所有测试数据在训练时被要求看到的情况&#xff0c;并且对于新的数据…

谈谈计算机科学与技术这门专业

原文地址&#xff1a;谈谈计算机科学与技术这门专业 - Pleasure的博客 下面是正文内容&#xff1a; 前言 这是一篇个人性质的笔记。 专业代码080901 或许也可以理解为计算机科学与技术专业大致都要经历的学习路线&#xff08;主要还是根据本校&#xff09;。 正文 主要专业课程…

Redis中的事件(二)

文件事件 文件事件的处理器 Redis为文件事件编写了多个处理器&#xff0c;这些事件处理器分别用于实现不同的网络通信需求&#xff0c;比如说: 1.为了对连接服务器的各个客户端进行应答&#xff0c;服务器要为监听套接字关联连接应答处理器2.为了接收客户端传来的命令请求&a…

数据结构与算法分析引论1

1.解决问题的算法有很多&#xff0c;但是在输入不同的情况下&#xff0c;不同算法之间的差异也很大&#xff0c;我们总是追求一个更快、更有效的方法。比如说普通的依次查找和二分查找&#xff0c;两者的差异就很大。我们使用大O表示法来表示算法的速度。依次查找就是O(n)&…

Fiddler抓包工具之Fiddler界面主菜单功能介绍

Fiddler界面主菜单功能介绍 File菜单 File菜单中的命令主要支持完成通过Fiddler来启动和停止web流量的捕获&#xff08;capture&#xff09;,也可以加载或存储捕获的流量 &#xff08;1&#xff09;Capture Traffic&#xff1a;默认勾选&#xff0c;勾选此项才可抓包&#xff…

USB HOST移植

一、USB简介 USB有USB1.0/1.1/2.0/3.0多个版本&#xff0c;标准USB由4根线组成,VCC&#xff0c;GND&#xff0c;D&#xff0c;D-&#xff0c;其中D和D-是数据线&#xff0c;采用差分传输。 在USB主机上,D-和D都是接了15K的电阻到地,所以在没有设备接入的时候,D、D-均是低电平。…

KCP部署NodeJS

一、windows下环境 安装python3.10.10 注意勾选add path&#xff0c;添加环境变量 安装windows-build-tools 以下代码&#xff0c;会在当前路径下载一个windows-build-tools npm install --production windows-build-tools tools 需要勾选C开发工具 二、linux下环境 腾讯…

Scala环境搭建

目录 前言 Scala的概述 Scala环境的搭建 一、配置Windows的JAVA环境 二、配置Windows的Scala环境 编写一个Scala程序 前言 学习Scala最好先掌握Java基础及高级部分知识&#xff0c;文章正文中会提到Scala与Java的联系&#xff0c;简单来讲Scala好比是Java的加强版&#x…

【Java多线程(2)】Thread常见方法和线程状态

目录 一、Thread类及常见方法 1. join() 等待一个线程 2. currentThread() 获取当前线程引用 3. sleep() 休眠当前线程 二、线程的状态 1. 线程的所有状态 2. 状态转移 一、Thread类及常见方法 接上文&#xff1a;多线程&#xff08;1&#xff09;http://t.csdnimg.cn/…

git-怎样把连续的多个commit合并成一个?

Git怎样把连续的多个commit合并成一个&#xff1f; Git怎样把连续的多个commit合并成一个&#xff1f; 参考URL: https://www.jianshu.com/p/5b4054b5b29e 查看git日志 git log --graph比如下图的commit 历史&#xff0c;想要把bai “Second change” 和 “Third change” 这…

【Linux系统zabbix安装部署】

1、安装lamp环境 [rootlocalhost software]# yum -y install mariadb mariadb-server httpd php php-mysql [rootlocalhost software]# systemctl enable httpd [rootlocalhost software]# systemctl restart htpd [rootlocalhost software]# systemctl restart httpd [rootloc…

cinder学习小结

1 官方文档 翻译官方文档学习 链接Cinder Administration — cinder 22.1.0.dev97 documentation (openstack.org) 1.1 镜像压缩加速 在cinder.conf配allow_compression_on_image_upload True可打开开关 compression_format xxx可设置镜像压缩格式&#xff0c;可为gzip 1.2 …

手撕算法-数组中的第K个最大元素

描述 分析 使用小根堆&#xff0c;堆元素控制在k个&#xff0c;遍历数组构建堆&#xff0c;最后堆顶就是第K个最大的元素。 代码 class Solution {public int findKthLargest(int[] nums, int k) {// 小根堆PriorityQueue<Integer> queue new PriorityQueue<>…

【python从入门到精通】-- 第二战:注释和有关量的解释

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

鸿蒙 HarmonyOS应用开发之API:Context

Context 是应用中对象的上下文&#xff0c;其提供了应用的一些基础信息&#xff0c;例如resourceManager&#xff08;资源管理&#xff09;、applicationInfo&#xff08;当前应用信息&#xff09;、dir&#xff08;应用文件路径&#xff09;、area&#xff08;文件分区&#x…

mybatis 实验报告1

文章目录 新建数据库新建项目&#xff0c;并导入jar包添加配置文件conf.xml定义实体类定义操作表user的sql的映射文件 userMapper.xml注册&#xff1a;将mapper.xml文件注册到conf.xml配置文件中一共6步&#xff0c;这个只是测试类&#xff0c;这个不算 新建数据库 命名是 随便…

嵌入式学习笔记(四)

LoadStore内存读写指令 单寄存器读写指令 指令码 ----------------ldr : 从内存地址中读取数据到寄存器中&#xff0c;读4个字节的数据str : 将寄存器中的数据写到内存地址中&#xff0c;写4个字节的数据 ------------------------------------------------------ldrh : 从内…