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的Django框架代码的一些示例
Apr 20 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
浅谈pyqt5在QMainWindow中布局的问题
Jun 21 Python
微信小程序python用户认证的实现
Jul 29 Python
Python操作SQLite数据库过程解析
Sep 02 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
用python解压分析jar包实例
Jan 16 Python
python动态文本进度条的实例代码
Jan 22 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
Jun 05 Python
PyCharm 解决找不到新打开项目的窗口问题
Jan 15 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中防止SQL注入实现代码
2011/02/19 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
Vue 进阶教程之v-model详解
2017/05/06 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
javascript实现计算器功能
2020/03/30 Javascript
Python中的sort()方法使用基础教程
2017/01/08 Python
Python_LDA实现方法详解
2017/10/25 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
详解Python sys.argv使用方法
2019/05/10 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
如何写毕业求职自荐信
2013/11/06 职场文书
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
施工资料员的岗位职责
2013/12/22 职场文书
艺术节主持词
2014/04/02 职场文书
诚信考试标语
2014/06/24 职场文书
庆国庆活动总结
2014/08/28 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript
Golang生成Excel文档的方法步骤
2021/06/09 Golang
golang实现浏览器导出excel文件功能
2022/03/25 Golang