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 相关文章推荐
在Mac OS上搭建Python的开发环境
Dec 24 Python
浅谈Python中的zip()与*zip()函数详解
Feb 24 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
python验证身份证信息实例代码
May 06 Python
解决python有时候import不了当前的包问题
Aug 28 Python
python设置代理和添加镜像源的方法
Feb 14 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
PyQT5 实现快捷键复制表格数据的方法示例
Jun 19 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
Mar 03 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
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
动态样式类封装JS代码
2009/09/02 Javascript
Extjs入门之动态加载树代码
2010/04/09 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
js判断文件格式及大小的简单实例(必看)
2016/10/11 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
Python找出list中最常出现元素的方法
2016/06/14 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
python文字转语音的实例代码分析
2019/11/12 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
ASP.NET Core中的配置详解
2021/02/05 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
韩国现代百货官网:Hmall
2018/03/21 全球购物
雪山饭庄的创业计划书范文
2014/01/18 职场文书
医师定期考核实施方案
2014/05/07 职场文书
授权委托书格式范文
2014/08/02 职场文书
奶茶店创业计划书
2014/08/14 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python