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加密自己的密码
Aug 04 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
python实现文本去重且不打乱原本顺序
Jan 26 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 Python
详解Django 中是否使用时区的区别
Jun 14 Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
Python列表倒序输出及其效率详解
Mar 04 Python
Python读取配置文件(config.ini)以及写入配置文件
Apr 08 Python
Django Path转换器自定义及正则代码实例
May 29 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 Python
在 Python 中利用 Pool 进行多线程
Apr 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
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
Python实现分割文件及合并文件的方法
2015/07/10 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
深入讲解Python中的迭代器和生成器
2015/10/26 Python
python中urllib.unquote乱码的原因与解决方法
2017/04/24 Python
Python实现将Excel转换为json的方法示例
2017/08/05 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
详解python读取image
2019/04/03 Python
Python ATM功能实现代码实例
2020/03/19 Python
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
德国户外商店:eXXpozed
2020/07/25 全球购物
保密承诺书
2014/03/27 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
务工证明怎么写
2015/06/18 职场文书