8.1 迭代器的概念与使用:走进 Python 的迭代世界

news2024/9/24 9:27:30

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏:
工💗重💗hao💗:野老杂谈
⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.
⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。
⭐️ 全流程数据技术实战指南:全面讲解从数据采集到数据可视化的整个过程,掌握构建现代化数据平台和数据仓库的核心技术和方法。
⭐️ 构建全面的数据指标体系:通过深入的理论解析、详细的实操步骤和丰富的案例分析,为读者提供系统化的指导,帮助他们构建和应用数据指标体系,提升数据驱动的决策水平。
⭐️《遇见Python:初识、了解与热恋》 :涵盖了Python学习的基础知识、进阶技巧和实际应用案例,帮助读者从零开始逐步掌握Python的各个方面,并最终能够进行项目开发和解决实际问题。

摘要

迭代器是 Python 中一个强大而常用的概念,它让我们能够逐个访问集合中的元素。本文将通过深入浅出的讲解和生动的例子,带你理解迭代器的本质与使用方法。无论是遍历列表、生成无限序列,还是自定义迭代对象,你都能在这里找到答案。

标签: Python、迭代器、生成器、for循环、面向对象编程


初识迭代器

迭代器是什么?

迭代器,简单来说,就是能够逐个返回元素的对象。就像在超市买水果时,你可以一个个地挑选苹果,而不是一下子把整个架子上的苹果都扛回家。

在 Python 中,任何可以用 for 循环遍历的对象都被称为可迭代对象(iterable),而一个迭代器(iterator)则是从这些可迭代对象中获取元素的对象。

# 一个简单的列表
fruits = ["apple", "banana", "cherry"]

# 获取迭代器对象
fruit_iterator = iter(fruits)

# 逐个获取元素
print(next(fruit_iterator))  # 输出: apple
print(next(fruit_iterator))  # 输出: banana
print(next(fruit_iterator))  # 输出: cherry
故事:循环与迭代的奥秘

想象一下,你是一个古老的图书馆管理员,负责查找并读取古籍中的神秘咒语。这些古籍就像 Python 中的可迭代对象,而你需要一个工具来逐页阅读——这就是迭代器的角色。

迭代器的基本原理

可迭代对象与迭代器对象

要深入理解迭代器,首先需要理解两个关键概念:可迭代对象(iterable)迭代器对象(iterator)

  • 可迭代对象:任何实现了 __iter__() 方法或有一个可以返回迭代器的 __getitem__() 方法的对象。
  • 迭代器对象:任何实现了 __next__() 方法和 __iter__() 方法的对象。
# 列表是可迭代对象
my_list = [1, 2, 3]

# 通过 iter() 函数获取迭代器
my_iterator = iter(my_list)

# 迭代器可以逐个访问元素
print(next(my_iterator))  # 输出: 1
print(next(my_iterator))  # 输出: 2
print(next(my_iterator))  # 输出: 3
自定义迭代器

你还可以创建自己的迭代器对象。只需要在类中实现 __iter__()__next__() 方法。

class Countdown:
    def __init__(self, start):
        self.current = start

    def __iter__(self):
        return self

    def __next__(self):
        if self.current <= 0:
            raise StopIteration
        else:
            self.current -= 1
            return self.current

# 使用自定义迭代器
countdown = Countdown(5)
for number in countdown:
    print(number)  # 输出: 4, 3, 2, 1, 0

生成器与惰性计算

生成器:简化迭代器创建

生成器是一种特殊的迭代器,通过 yield 关键字生成一个元素序列,而不是一次性返回所有结果。生成器非常适合处理大数据或需要惰性计算的场景。

def countdown(n):
    while n > 0:
        yield n
        n -= 1

# 使用生成器
for number in countdown(5):
    print(number)  # 输出: 5, 4, 3, 2, 1
惰性计算的优势

生成器的一个显著特点是惰性计算,即在需要时才计算下一步结果。这在处理大数据集时特别有用。

def infinite_sequence():
    num = 0
    while True:
        yield num
        num += 1

# 无限序列生成器(小心使用)
for i in infinite_sequence():
    print(i)
    if i > 5:  # 我们要有个终止条件,否则会一直循环下去
        break

Python 内置的迭代工具

itertools 模块

Python 提供了强大的 itertools 模块,它包含了一系列有用的迭代工具。例如,itertools.cycle() 可以创建一个无限循环的迭代器。

import itertools

colors = ["red", "green", "blue"]
color_cycle = itertools.cycle(colors)

# 无限循环打印颜色
for _ in range(6):
    print(next(color_cycle))  # 输出: red, green, blue, red, green, blue
zip、map 和 filter

除了 itertools,Python 还有其他常用的内置迭代工具,如 zipmapfilter

# zip:组合两个或多个迭代器
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 95]
for name, score in zip(names, scores):
    print(f"{name} scored {score}")

# map:将函数应用于每个元素
squared = map(lambda x: x**2, [1, 2, 3, 4])
print(list(squared))  # 输出: [1, 4, 9, 16]

# filter:筛选出符合条件的元素
evens = filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6])
print(list(evens))  # 输出: [2, 4, 6]

实际应用中的迭代器

大数据处理

迭代器和生成器在处理大数据集时非常有用,因为它们不需要一次性加载所有数据。

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line.strip()

# 使用生成器逐行读取大文件
for line in read_large_file('large_file.txt'):
    print(line)
无限流和实时数据

迭代器非常适合处理无限流和实时数据。比如在实时监控系统中,可以用迭代器不断获取新数据。

import random

def sensor_data():
    while True:
        yield random.randint(0, 100)

# 模拟传感器数据流
for data in sensor_data():
    print(f"Sensor data: {data}")
    if data > 90:  # 假设数据超过90时报警
        print("Alert! High value detected.")
        break

总结——掌握迭代器的精髓

通过本文的讲解,你应该已经掌握了迭代器的基本概念、使用方法以及它们在实际编程中的应用。迭代器不仅使代码更加简洁和高效,还为我们处理大数据集和实时流提供了强大的工具。

Python 中的迭代器概念虽然简单,但在实际编程中却非常实用。无论你是新手还是老手,都可以通过掌握迭代器来提升你的代码质量。继续探索和应用这些强大的工具吧,编程的乐趣无穷无尽!


在这里插入图片描述

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

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

相关文章

jwt伪造身份组组组合拳艰难通关

前言 现在的攻防演练不再像以往那样一个漏洞直捣黄龙&#xff0c;而是需要各种组合拳才能信手沾来&#xff0c;但是有时候使尽浑身解数也不能诚心如意。 前期信息收集 首先是拿到靶标的清单 访问系统的界面&#xff0c;没有什么能利用的功能点 首先进行目录扫描&#xff0c;…

IO/作业/2024/8/8

1第一题 #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <semaphore.h> #include <wait.h> #include <signal.h> #include <sys/socket.h> #include <arpa/inet.h> #include <sys/socket.h>…

如何禁用外来U盘,保护企业电脑不被“插”一刀?

在数字时代&#xff0c;U盘就像是随身携带的小型保险箱&#xff0c;但它也可能变成一个潜伏的危险品。想象一下&#xff0c;有一天你的同事无意间把一个带有病毒的U盘插进了你的电脑&#xff0c;结果你辛辛苦苦做出来的项目文件就那么瞬间被格式化了…… 为了避免这种情况的发…

CUTLASS 2.x CUTLASS 3.x Intro 学习笔记

CUTLASS GEMM模板中有大量可以调节和设置的模板参数&#xff0c;这些参数的设置会高度影响Kernel性能。这个分享将为大家介绍从2.x到3.x&#xff0c;CUTLASS kernel实现的变化&#xff0c;这些参数的原理和选择的最佳实践。Slides来自BiliBili NVIDIA英伟达频道 上传的《Tensor…

python-热杆上的蚂蚁(赛氪OJ)

[题目描述] 有一个不断升温的杆子&#xff0c;上面有若干个蚂蚁&#xff0c;蚂蚁们需要尽快爬出这个杆子&#xff0c;否则就会因为高温而被烧死。 这里假设每只蚂蚁行走的最大速度是 1cm/s 。 当一只蚂蚁走到杆的尽头时&#xff0c;就会立即从秆上掉落&#xff0c;从而逃离热杆…

两种企业总体业务流程架构模式的比较分析

在之前的关于企业业务流程规划的系列文章中&#xff0c;我们分别对企业业务流程规划的价值、原则&#xff0c;以及如何应用企业的业务流程架构等做了充分的阐述&#xff0c;今天我们将对两种常见的企业总体业务流程架构模式进行比较分析。 我们在辅导企业做业务流程规划和总体…

Python打开JSON/CSV文件的正确方式

前言 我们在使用python的过程中&#xff0c;经常需要它完成一些数据处理的工作&#xff0c;其中尤以json/csv文件为常见。今天&#xff0c;博主针对UnicodeDecodeError异常进行试验&#xff0c;因为这个是新手最容易犯错的地方。 Q&#xff1a;如何应对 UnicodeDecodeError 读…

(el-Time-Picker)操作(不使用 ts):Element-plus 中 TimePicker 组件的使用及输出想要时间格式需求的解决过程

Ⅰ、Element-plus 提供的 TimePicker 时间选择器组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 TimePicker 组件情况&#xff1a; 其一、Element-ui 自提供的 TimePicker 代码情况为(示例的代码)&#xff1a; // Element-plus 提供的组件代码: <template>…

七、1 ADC模数转换器介绍+有关知识点

目录 1、介绍 &#xff08;1&#xff09;ADC&#xff0c;模拟信号转换为数字信号 &#xff08;2&#xff09;DAC和PWM&#xff0c;数字信号转换为模拟信号 &#xff08;3&#xff09;ADC的两个关键参数 &#xff08;4&#xff09; &#xff08;5&#xff09; &#xff08…

深度学习代码运行RuntimeError:No such operator torchvision::nms解决方案

RuntimeError: No such operator torchvision::nms解决方案 跑代码的时候碰到了"RuntimeError: No such operator torchvision::nms"&#xff0c;找到的资料显示大多是"torch"和"torchvision"版本不匹配&#xff0c;让二者版本一致即可解决。但我…

抱抱脸自动下载模型地址

HuggingFace模型自动下载找保存地址 问题&#xff1a;OSError: Incorrect path_or_model_id: THUDM/cogvlm2-llama3-chat-19B/model.safetensors.index.json. Please provide either the path to a local folder or the repo_id of a model on the Hub. 解决&#xff1a;MODEL_…

多叉树的深度优先遍历(以电话号码的字母组合为例)

在我们的座机上&#xff0c;都有这种数字与字母对应的按键。 以此为例&#xff0c;讲解多叉树的深度优先遍历 问题 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同…

奥运新项目带来新增长,小众运动攀岩相关商品成交额同比增长 160%

巴黎奥运会临近收官&#xff0c;中国健儿在乒乓球、网球、跳水、游泳等众多项目中表现出色&#xff0c;不仅吸引了全球目光&#xff0c;更在国内掀起了一股强劲的“奥运热”。抖音电商数据显示&#xff0c;7月20日-8月2日“热力先锋季”主题活动期间&#xff0c;抖音电商体育类…

“名字说我俩挺配的”:解锁姓名背后的神秘共鸣,带你玩转名字魔法!

引言&#xff1a;从姓名中挖掘灵魂共鸣 大家好&#xff0c;欢迎来到“姓名共鸣者”的世界&#xff01;不管你是想知道自己的名字和暗恋对象的名字有多配&#xff0c;还是好奇自己和某个历史人物之间的缘分&#xff0c;或者只是想找点乐子&#xff0c;“姓名共鸣者”都能满足你…

[qt] 数据库基本概念

一 数据和数据库 1.1 数据 数据可以是被计算机接受处理和处理的符号。可以有数字、文字、表格、图形、图像和声音等 1.2 数据库 顾名思义就是存放数据的仓库 1.2.1 特点 数据按照数据模型组织&#xff0c;是高度结构化的&#xff0c;可供多个用户共享并且具有一定的安全性…

视频怎么转换成mp3音频?视频转mp3音频的几个批量方法

视频怎么转换成mp3音频&#xff1f;在现代的工作场景中&#xff0c;多媒体文件的处理已经成为许多工作任务中不可或缺的一部分。特别是在处理视频和音频文件时&#xff0c;有时候需要将视频文件转换成MP3音频格式。这一操作不仅仅是简单的格式转换&#xff0c;更是为了适应不同…

微信小程序实现Canvas画板

这个小demo适用于 快递实名签收等业务逻辑 源码如下&#xff1a; js文件&#xff1a; Page({data: {ctx: "", // 保存 canvas 上下文pen: 5, // 画笔默认的宽度color: "#000", // 画笔默认的颜色},startX: 0, // 保存 X 坐标startY: 0, // 保存 Y 坐标o…

人在职场,格局越小,破事越多

人在职场&#xff0c;面对同样的琐碎、倾轧&#xff0c;有人处理得游刃有余&#xff0c;有人总是战战兢兢&#xff0c;表面上看起来&#xff0c;是能力水平的差别&#xff0c;归根究底&#xff0c;是格局的不同。 格局越小的人&#xff0c;眼里的破事越多&#xff1b;格局越大…

【限流与Sentinel超详细分析】

Sentinel 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、熔断降级、系统自适应保护等多个维度来保障微服务的稳定性。 1 Sentinel 基本概念 资源…

OpenAI开发ChatGPT“反作弊神器”,99.9%超高命中率,还没上线

检查内容是否用了ChatGPT&#xff0c;准确率高达99.9%&#xff01; OpenAI又左右互搏上了&#xff0c;给AI生成的文本打水印&#xff0c;高达99.9&#xff05;准确率抓「AI枪手」作弊代写。其能够精准识别出论文或研究报告是否由ChatGPT撰写&#xff0c;甚至能追溯其使用的具体…