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获取图片颜色信息的方法
Mar 18 Python
python检测是文件还是目录的方法
Jul 03 Python
Python设置Socket代理及实现远程摄像头控制的例子
Nov 13 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
在双python下设置python3为默认的方法
Oct 31 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
Nov 28 Python
基于Tensorflow:CPU性能分析
Feb 10 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
Mar 06 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
Python urllib3软件包的使用说明
Nov 18 Python
Python中X[:,0]和X[:,1]的用法
May 10 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
jQuery html()等方法介绍
2009/11/18 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
Python引用计数操作示例
2018/08/23 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
房产转让协议书
2014/04/11 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
北京导游词
2015/02/12 职场文书
交通事故起诉书
2015/05/19 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python