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类的专用方法实例分析
Jan 09 Python
Python自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
python爬取网页内容转换为PDF文件
Jul 28 Python
JSON文件及Python对JSON文件的读写操作
Oct 07 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
python支付宝支付示例详解
Aug 22 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
Python文本处理简单易懂方法解析
Dec 19 Python
python 牛顿法实现逻辑回归(Logistic Regression)
Oct 15 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
PHP HTML代码串 截取实现代码
2009/06/29 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
JS之小练习代码
2008/10/12 Javascript
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
详解python破解zip文件密码的方法
2020/01/13 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
元旦晚会开场白
2015/05/29 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers