python如何实现反向迭代


Posted in Python onMarch 20, 2018

本文实例为大家分享了python实现反向迭代的具体代码,供大家参考,具体内容如下

案例:

       实现一个连续的浮点数发生器,FloatRange,根据给定范围(start, end) 和步进值,产生一些列的浮点数,例如:FloatRange(3,4,0.2),将产生下列序列:

       正向:3.0 3.2 …… 4.0

       反向:4.0 3.8 …… 3.0

如何实现?

方法1:列表翻转

#!/usr/bin/python3
 
l = [1, 2, 3, 4, 5, 6]
l.reverse()
for i in l:
  print(i)
   
# 出现问题,改变了原列表,不可取

方法2:列表切片

#!/usr/bin/python3
 
l = [1, 2, 3, 4, 5, 6]
for i in l[::-1]:
  print(i)
   
# 得到了和原列表等大的列表,某种程度上很浪费

方法3: __ reversed__方法

#!/usr/bin/python3
 
l = [1, 2, 3, 4, 5, 6]
 
for i in reversed(l):
  print(i)

如何逻辑整理?

 for循环正向迭代调用__iter__方法,反向迭代调用__reversed__方法,可以定义一个类,写上这些方法

#!/usr/bin/python3
 
 
class FloatRange(object):
  def __init__(self, start, end, step):
    self.dot = self.__get_dot_num(step)
    # 有多少个小数点就乘以10的多少次幂,因为浮点数运算不准确,换算成整形数进行计算
    self.start = start*pow(10, self.dot)
    self.end = end*pow(10, self.dot)
    self.step = step*pow(10, self.dot)
     
  def __get_dot_num(self, step):
    # 计算step有多少个小数点
    if isinstance(step, int):
      return step
    else:
      # 通过round实现计算有多少位小数,首创
      for dot in range(len(str(step))+1):
        if step == round(step, dot):
          return dot
 
  def __iter__(self):
    # 正向迭代
    while self.start <= self.end:
      yield self.start/pow(10, self.dot)
      self.start += self.step
 
  def __reversed__(self):
    # 反向迭代
    while self.end >= self.start:
      yield self.end/pow(10,self.dot)
      self.end -= self.step
 
if __name__ == '__main__':
   
  float_num_1 = FloatRange(2, 5, 0.1)
  float_num_2 = FloatRange(2, 5, 0.1)
   
  # 正向迭代
  for i in float_num_1:
    print(i)
     
  print('_'*60)
   
  # 反向迭代
  for x in reversed(float_num_2):
    print(x)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单介绍Python中的struct模块
Apr 28 Python
python比较2个xml内容的方法
May 11 Python
python网络爬虫学习笔记(1)
Apr 09 Python
Python 在字符串中加入变量的实例讲解
May 02 Python
python实现批量注册网站用户的示例
Feb 22 Python
Python将字符串常量转化为变量方法总结
Mar 17 Python
numpy.random模块用法总结
May 27 Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 Python
python如何爬取网页中的文字
Jul 28 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 Python
python利用高阶函数实现剪枝函数
Mar 20 #Python
python flask中静态文件的管理方法
Mar 20 #Python
python web基础之加载静态文件实例
Mar 20 #Python
python如何修改装饰器中参数
Mar 20 #Python
python MySQLdb使用教程详解
Mar 20 #Python
django中的HTML控件及参数传递方法
Mar 20 #Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 #Python
You might like
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
关于PHP5 Session生命周期介绍
2010/03/02 PHP
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
仅利用30行Python代码来展示X算法
2015/04/01 Python
python绘图方法实例入门
2015/05/19 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
Python合并字典键值并去除重复元素的实例
2016/12/18 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
今冬明春火灾防控工作方案
2014/05/29 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
党小组意见范文
2015/06/08 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
正确使用MySQL update语句
2021/05/26 MySQL