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实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
介绍Python的@property装饰器的用法
Apr 28 Python
python字符串编码识别模块chardet简单应用
Jun 15 Python
python搭建微信公众平台
Feb 09 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
Python实现简单的用户交互方法详解
Sep 25 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
wxPython实现绘图小例子
Nov 19 Python
python中的3种定义类方法
Nov 27 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
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
跟老齐学Python之Python文档
2014/10/10 Python
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
python代码如何注释
2020/06/01 Python
python 动态绘制爱心的示例
2020/09/27 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
判断单链表中是否存在环
2012/07/16 面试题
综合办公室主任职责
2013/12/16 职场文书
总账会计岗位职责
2014/03/13 职场文书
个人担保书格式范文
2014/05/12 职场文书
营销团队口号
2014/06/06 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
社区党员干部承诺书
2015/05/04 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
会计入职心得体会
2016/01/22 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
html5调用摄像头实例代码
2021/06/28 HTML / CSS
2022漫威和DC电影上映作品
2022/04/05 欧美动漫