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爬虫
Dec 25 Python
Python中Class类用法实例分析
Nov 12 Python
Python数据结构之栈、队列的实现代码分享
Dec 04 Python
Python实现将照片变成卡通图片的方法【基于opencv】
Jan 17 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 Python
Python实现全排列的打印
Aug 18 Python
Python 实现交换矩阵的行示例
Jun 26 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
解决paramiko执行命令超时的问题
Apr 16 Python
Python连接Impala实现步骤解析
Aug 04 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 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
PHP实现图片压缩的两则实例
2014/07/19 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
2017/02/16 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
详解php用static方法的原因
2018/09/12 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
Python入门_浅谈for循环、while循环
2017/05/16 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
即将毕业大学生自荐信
2014/01/24 职场文书
信息管理专业自荐书
2014/06/05 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
团员个人年度总结
2015/02/26 职场文书
网络妈妈观后感
2015/06/08 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
php将xml转化对象的实例详解
2021/11/17 PHP