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使用xlrd读取Excel格式文件的方法
Mar 10 Python
python getopt详解及简单实例
Dec 30 Python
python生成式的send()方法(详解)
May 08 Python
Python列表删除的三种方法代码分享
Oct 31 Python
python生成九宫格图片
Nov 19 Python
Python爬虫使用代理IP的实现
Oct 27 Python
Python+OpenCV实现图像的全景拼接
Mar 05 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
学会迭代器设计模式,帮你大幅提升python性能
Jan 03 Python
Python turtle实现贪吃蛇游戏
Jun 18 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程序员工具
2008/05/26 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
php获取汉字首字母的函数
2013/11/07 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
php格式化电话号码的方法
2015/04/24 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
JavaScript实现通讯录功能
2020/12/27 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python编程之变量赋值操作实例分析
2017/07/24 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
党员大会主持词
2014/04/02 职场文书
2015年老干部工作总结
2015/04/23 职场文书
礼貌问候语大全
2015/11/10 职场文书
《三国志》赏析
2019/08/27 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
MySQL中varchar和char类型的区别
2021/11/17 MySQL