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使用正则搜索字符串或文件中的浮点数代码实例
Jul 11 Python
跟老齐学Python之永远强大的函数
Sep 14 Python
使用python开发vim插件及心得分享
Nov 04 Python
Python实现生成简单的Makefile文件代码示例
Mar 10 Python
python插入排序算法实例分析
Jul 03 Python
老生常谈Python序列化和反序列化
Jun 28 Python
python好玩的项目—色情图片识别代码分享
Nov 07 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
pytorch 在sequential中使用view来reshape的例子
Aug 20 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
Python实现投影法分割图像示例(二)
Jan 17 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 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
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
php中的常用魔术方法总结
2013/08/02 PHP
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
一分钟理解js闭包
2016/05/04 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
pytorch 查看cuda 版本方式
2020/06/23 Python
virtualenv介绍及简明教程
2020/06/23 Python
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
职业规划书如何设计?
2014/01/09 职场文书
横店影视城导游词
2015/02/06 职场文书
部队2015年终工作总结
2015/04/02 职场文书
消防验收申请报告
2015/05/15 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
2015暑期社会实践通讯稿
2015/07/18 职场文书
婚宴新娘致辞
2015/07/28 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python