前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 迭代器和生成器-反向迭代

Python 迭代器和生成器-反向迭代

作者头像
用户7886150
修改于 2021-01-21 03:13:04
修改于 2021-01-21 03:13:04
5240
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Python迭代器

反向迭代 

问题 

你想反方向迭代一个序列 

解决方案 

使用内置的 reversed() 函数,比如: 

>>> a = [1, 2, 3, 4]

>>> for x in reversed(a):

...     print(x)

...

4

3

2

反向迭代仅仅当对象的大小可预先确定或者对象实现了 __reversed__() 的特殊方法时才能生效。 如果两者都不符合,那你必须先将对象转换为一个列表才行,比如: 

# Print a file backwards

f = open('somefile')

for line in reversed(list(f)):

    print(line, end='') 

要注意的是如果可迭代对象元素很多的话,将其预先转换为一个列表要消耗大量的内存。 

讨论 

很多程序员并不知道可以通过在自定义类上实现 __reversed__() 方法来实现反向迭代。比如: 

class Countdown:

    def __init__(self, start):

        self.start = start

    # Forward iterator

    def __iter__(self):

        n = self.start

        while n > 0:

            yield n

            n -= 1

    # Reverse iterator

    def __reversed__(self):

        n = 1

        while n <= self.start:

            yield n

            n += 1

for rr in reversed(Countdown(30)):

    print(rr)

for rr in Countdown(30):

    print(rr) 

定义一个反向迭代器可以使得代码非常的高效, 因为它不再需要将数据填充到一个列表中然后再去反向迭代这个列表。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python 反向迭代器reserved
f = open('somefile') for line in reversed(list(f)): print(line, end='')
用户5760343
2019/09/29
7560
Python中迭代器&生成器的"奇技淫巧"
Python 的迭代器语法简单,部分思想和Java8 Stream API有类似的地方(当然,Python要比Java年长),引入lambda表达式,predicate,函数式编程,行为参数化等可以做很多事情,同时和JAVA一样,对迭代行为进行了语法封装。但是本质上还是通过调用可迭代对象的迭代器来实现。
山河已无恙
2023/01/30
1.4K0
Python教程第5章 | Python迭代器和生成器
比如在 Java 中,我们通过 List 集合的下标来遍历 List 集合中的元素,在 Python 中,给定一个 list 或 tuple,我们可以通过 for 循环来遍历这个 list 或 tuple ,这种遍历就是迭代。
仲君Johnny
2024/01/24
2650
Python教程第5章 | Python迭代器和生成器
关于python迭代器学习
你通过遍历来使⽤它们,要么⽤⼀个“for”循环,要么将它们传递给任意可以进⾏迭代的函数和结构。
python与大数据分析
2022/03/11
1960
关于python迭代器学习
python学习笔记4.2-python高级之迭代器
本文介绍了Python中迭代器的各种方法,包括enumerate()、map()、filter()、reduce()、sorted()、zip()和itertools模块中的函数。这些方法可以用于对序列进行迭代,并处理迭代过程中的各种问题。
锦小年
2018/01/02
9250
python的迭代对象
迭代对象这个概念是python里面非常核心的东西,我想跟大家分享一下,什么是可迭代对象。
stormwen
2019/08/05
9270
Python 强化训练:第三篇
强化训练:第三篇 问题来源 pythoner面试经常会问到迭代器和生成器的区别 内容 可迭代对象 迭代器:正向迭代, 反向迭代 生成器: 1. 可迭代对象/ 迭代器 for 语句对对象调用了 iter()方法, 使用next()方法 内置函数:iter()可以获取迭代器对象,使用迭代器的next()方法可以访问下一个元素 for element in [1, 2, 3]: print(element) for element in "abcdef": print(element) for
谢伟
2018/06/06
3800
迭代器和生成器
一 迭代和可迭代协议 什么叫迭代 1234不可以for循环,是因为它不可迭代。那么如果“可迭代”,就应该可以被for循环了。 这个我们知道呀,字符串、列表、元组、字典、集合都可以被for循环,说明他们都是可迭代的。 我们怎么来证明这一点呢? from collections import Iterable l = [1,2,3,4] t = (1,2,3,4) d = {1:2,3:4
用户1214487
2018/01/23
6600
【Python迭代器探秘】:揭秘迭代器与生成器的魔法,掌握高效循环的艺术
迭代器是Python语言中的一个重要特性,用于遍历可迭代对象(如列表、元组、字典等)中的元素。Python中的很多内置对象都支持迭代器模式,可以通过iter()函数获取一个迭代器对象,并使用next()方法逐一访问其中的元素。
爱喝兽奶的熊孩子
2024/07/15
3320
【Python迭代器探秘】:揭秘迭代器与生成器的魔法,掌握高效循环的艺术
迭代器、生成器和可迭代对象
上次我们简单分享了迭代器和生成器,本次我们来更加深入的了解相关概念和使用方法,希望能对你有所帮助。
罗罗攀
2021/12/06
6420
Python教程(26)——Python迭代器和生成器详解
Python中的迭代器是一种对象,它可以迭代(遍历)一个可迭代对象(比如列表、元组或字符串)的元素。迭代器用于实现迭代器协议,即包含 __iter__() 方法和 __next__() 方法。
一点sir
2024/02/18
3310
Python教程(26)——Python迭代器和生成器详解
Python 迭代器和生成器有什么用?
本文将探讨python的迭代器和生成器在实际场景中的一些巧妙用法。掌握迭代器和生成器的使用,能够让开发者在解决实际问题时更加得心应手。
每周聚焦
2024/06/14
1520
Python 迭代器和生成器有什么用?
编写高效且优雅的 Python 代码(
Python 作为一门入门极易并容易上瘾的语音,相信已经成为了很多人 “写着玩” 的标配脚本语言。但很多教材并没有教授 Python 的进阶和优化。本文作为进阶系列的文章,从基础的语法到函数、迭代器、类,还有之后系列的线程 / 进程、第三方库、网络编程等内容,共同学习如何写出更加 Pythonic 的代码
py3study
2020/01/03
1.2K0
python生成器和迭代器
第二,本次迭代的要依赖上一次的结果继续往下做,如果中途有任何停顿,都不能算是迭代。
用户7886150
2020/11/30
4990
Python基础入门(迭代器和生成器)
迭代器有两个基本的方法:iter() 和 next(),且字符串、列表或元组对象都可用于创建迭代器,迭代器对象可以使用常规 for 语句进行遍历,也可以使用 next() 函数来遍历。
py3study
2020/01/19
3880
python 中的迭代器与生成器
迭代器模式是一种十分常用的行为设计模式,各种面向对象编程语言大多提供了迭代器模式的实现和具体的工具类,迭代器主要用来按需要的顺序顺次获取容器中的数据项。 我们在此前的文章中用简单明了的例子说明了 Python 中迭代器与关键字 yield 的用法。
用户3147702
2022/06/27
6280
python 中的迭代器与生成器
一文读懂Python生成器和迭代器
在python中,我们经常会遇到需要对一系列的元素进行遍历或处理的情况,例如对列表中的每个元素进行求和或排序,或者对文件中的每一行进行读取或写入。为了实现这样的功能,我们通常会使用for循环或while循环来逐个获取元素,并进行相应的操作。例如:
Echo_Wish
2023/11/30
2800
Python高效编程(二)
实际编程和面试都会遇到的典型问题。 图片来源于网络 如何实现可迭代对象和迭代器对象 #可迭代对象 l = [1,2,3,4] s = 'abcde' #迭代器对象 t = iter(l) impo
dreamkong
2018/06/21
8170
Python 迭代器与生成器
迭代器:是访问数据集合内元素的一种方式,一般用来遍历数据,但是他不能像列表一样使用下标来获取数据,也就是说迭代器是不能返回的。
昱良
2019/05/28
7780
迭代器和生成器
Python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。
全栈程序员站长
2022/07/21
4950
相关推荐
python 反向迭代器reserved
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档