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中的len()函数的使用
Apr 07 Python
在Python的Django框架上部署ORM库的教程
Apr 20 Python
利用python模拟sql语句对员工表格进行增删改查
Jul 05 Python
Python使用遗传算法解决最大流问题
Jan 29 Python
Python中if elif else及缩进的使用简述
May 31 Python
python3中property使用方法详解
Apr 23 Python
Python程序控制语句用法实例分析
Jan 14 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
Django DRF APIView源码运行流程详解
Aug 17 Python
python3中编码获取网页的实例方法
Nov 16 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 Python
对PyTorch中inplace字段的全面理解
May 22 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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
PHP使用PHPMailer发送邮件的简单使用方法
2013/11/12 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
PHP实现验证码校验功能
2017/11/16 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
python实现用户登陆邮件通知的方法
2015/07/09 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
《赵州桥》教学反思
2014/02/17 职场文书
社区健康教育实施方案
2014/03/18 职场文书
社区矫正工作方案
2014/06/04 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
二手房购房协议书范本
2014/10/05 职场文书
党员转正申请报告
2015/05/15 职场文书
初中生物教学随笔
2015/08/15 职场文书
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
Java并发编程必备之Future机制
2021/06/30 Java/Android
对象析构函数__del__在Python中何时使用
2022/03/22 Python