Python 如何反方向迭代一个序列


Posted in Python onJuly 28, 2020

问题

你想反方向迭代一个序列

解决方案

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

>>> a = [1, 2, 3, 4]
>>> for x in reversed(a):
...   print(x)
...
4
3
2
1

反向迭代仅仅当对象的大小可预先确定或者对象实现了 __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)

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

以上就是Python 如何反方向迭代一个序列的详细内容,更多关于Python 反向迭代的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
跟老齐学Python之dict()的操作方法
Sep 24 Python
python实现将html表格转换成CSV文件的方法
Jun 28 Python
Python中time模块与datetime模块在使用中的不同之处
Nov 24 Python
Python scikit-learn 做线性回归的示例代码
Nov 01 Python
python构建基础的爬虫教学
Dec 23 Python
Python实现简单石头剪刀布游戏
Jan 20 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 Python
常用的Python代码调试工具总结
Jun 23 Python
Python Matplotlib简易教程(小白教程)
Jul 28 #Python
Python把图片转化为pdf代码实例
Jul 28 #Python
关于python3.7安装matplotlib始终无法成功的问题的解决
Jul 28 #Python
Python 合并拼接字符串的方法
Jul 28 #Python
Python reques接口测试框架实现代码
Jul 28 #Python
如何用Matplotlib 画三维图的示例代码
Jul 28 #Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 #Python
You might like
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
跟老齐学Python之关于类的初步认识
2014/10/11 Python
Python字符编码判断方法分析
2016/07/01 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
机电工程专业应届生求职信
2013/10/03 职场文书
特色冷饮店创业计划书
2014/01/28 职场文书
教职工代表大会主持词
2014/04/01 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
2014年幼师工作总结
2014/11/22 职场文书
财务出纳岗位职责
2015/03/31 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
入党申请书怎么写?
2019/06/11 职场文书
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS