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解析xml成对应的html示例分享
Apr 02 Python
Python的Django框架中的Context使用
Jul 15 Python
在Python的while循环中使用else以及循环嵌套的用法
Oct 14 Python
Python单例模式的两种实现方法
Aug 14 Python
python如何去除字符串中不想要的字符
Jul 05 Python
一份python入门应该看的学习资料
Apr 11 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
TensorFlow绘制loss/accuracy曲线的实例
Jan 21 Python
vscode配置anaconda3的方法步骤
Aug 08 Python
python从PDF中提取数据的示例
Oct 30 Python
Python下载的11种姿势(小结)
Nov 18 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的论坛(7)
2006/10/09 PHP
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
python 正则式使用心得
2009/05/07 Python
python实现图片批量剪切示例
2014/03/25 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
对python字典过滤条件的实例详解
2019/01/22 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
中药专业自荐信范文
2014/03/18 职场文书
安阳殷墟导游词
2015/02/10 职场文书
重温入党誓词主持词
2015/06/29 职场文书
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js