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冒泡排序算法的实现代码
Nov 21 Python
Python 文件管理实例详解
Nov 10 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
如何用python写一个简单的词法分析器
Dec 18 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
python实现对输入的密文加密
Mar 20 Python
Python实现查找字符串数组最长公共前缀示例
Mar 27 Python
Python完全识别验证码自动登录实例详解
Nov 24 Python
python实现简单的购物程序代码实例
Mar 03 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
python和JavaScript哪个容易上手
Jun 23 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
php ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
php生成QRcode实例
2014/09/22 PHP
PHP中使用BigMap实例
2015/03/30 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
全球度假村:Club Med
2017/11/27 全球购物
一道SQL面试题
2012/12/31 面试题
视图的作用
2014/12/19 面试题
药学专业学生的自我评价分享
2014/02/06 职场文书
公司员工检讨书
2014/02/08 职场文书
质量管理标语
2014/06/12 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
计算机教师工作总结
2015/08/13 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers