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 相关文章推荐
Python操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
在Python中进行自动化单元测试的教程
Apr 15 Python
Python计算三维矢量幅度的方法
Jun 15 Python
Odoo中如何生成唯一不重复的序列号详解
Feb 10 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
python-str,list,set间的转换实例
Jun 27 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
python多进程(加入进程池)操作常见案例
Oct 21 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
Apr 07 Python
Python 全局空间和局部空间
Apr 06 Python
Python 文字识别
May 11 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
PHP5/ZendEngine2的改进
2006/10/09 PHP
PHP 实例化类的一点摘记
2008/03/23 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
Ext 今日学习总结
2010/09/19 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
vue如何限制只能输入正负数及小数
2019/07/04 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
python文件比较示例分享
2014/01/10 Python
Python 爬虫图片简单实现
2017/06/01 Python
老生常谈python之鸭子类和多态
2017/06/13 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
澳洲的服装老品牌:SABA
2018/02/06 全球购物
护士医德医风自我评价
2014/09/15 职场文书
审美与表现自我评价
2015/03/09 职场文书
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL