如何进行反向迭代以及如何实现反向迭代
来源:互联网 发布:网络错误代码10071 编辑:程序博客网 时间:2024/06/06 16:21
实际案例
实现一个连续浮点数发生器FloatRange(和xrange类似),根据给定范围(start,end)和步进值(step)产生一系列连续浮点数,如迭代FloatRange(3.0, 4.0. 0.2)可产生序列:
- 正向:3.0 -> 3.2 -> 3.4 -> 3.6 -> 3.8 -> 4.0
- 反向:4.0 -> 3.8 -> 3.6 -> 3.4 -> 3.2 -> 3.0
正向
我们首先思考如何实现正向迭代。回想一下之前的知识点,我们可以实现__iter__()返回一个迭代器对象,这样我们不就可以实现正向迭代吗?
代码如下:
def __iter__(self): t = self.start while round(t, 2) <= round(self.end, 2): yield t t += self.step
由于实际案例中是对浮点数进行处理,因此我们在此处使用round()实现对浮点数的四舍五入。
反向
在列表中,如果我们要将列表反向迭代通常使用reverse()。但这个方法有个缺陷就是会改变列表。因此,我们推荐使用reversed(),它会返回一个迭代器。这里,我们可以实现__reversed__()解决反向迭代问题。
代码如下:
def __reversed__(self): t = self.end while round(t, 2) >= round(self.start, 2): yield t t -= self.step
该程序的最终代码如下:
# -*- coding: utf-8 -*-class FloatRange: def __init__(self, start, end, step): self.start = start self.end = end self.step = step # 正向迭代 def __iter__(self): t = self.start while round(t, 2) <= round(self.end, 2): yield t t += self.step # 反向迭代 def __reversed__(self): t = self.end while round(t, 2) >= round(self.start, 2): yield t t -= self.stepif __name__ == "__main__": for x in FloatRange(3.0, 4.0, 0.2): print x print "" for x in reversed(FloatRange(3.0, 4.0, 0.2)): print x
运行结果为:
3.03.23.43.63.84.04.03.83.63.43.23.0
阅读全文
0 0
- python 3-4 如何进行反向迭代以及如何实现反向迭代 __reversed__ yield
- python-8-如何进行反向迭代以及如何实现反向迭代?
- 如何进行反向迭代以及如何实现反向迭代
- 3-4进行反向迭代以及实现反向迭代
- 关于Python类对象如何实现的反向迭代
- Python高级编程-如何实现反向迭代?
- map 如何迭代
- map 如何迭代
- LinkedHashMap如何实现迭代时有序
- C++ 容器的正向和反向迭代
- 链表的反向迭代和正向迭代输出
- 如何进行软件设计——不断迭代
- android如何进行版本迭代及代码审核
- 如何迭代通过集合
- Map映射如何迭代
- python代码实现:如何反序的迭代一个序列?
- 如何实现反向代理?与正向代理的区别以及Nginx 反向代理优势
- 什么是反向代理?以及网站如何预防被反向代理?
- jsp基础
- CS231n课程笔记翻译9:卷积神经网络笔记
- 牛客三模-大数据方向:选择题和编程题
- 迷雾——dfs
- 齐次含义
- 如何进行反向迭代以及如何实现反向迭代
- jsp语法和jsp三大指令
- spring ajax前后端传递复杂参数
- XlistView+Xutils+PhotoView
- Java异常处理
- 高精度乘法 普通(n^2)+fft(nlogn)
- 【MFC】【精心整理】【实用】visual C++中最常用的类与API函数
- 我的Android学习之路01-GridView
- cartographer源码分析(22)-sensor-collator.h