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提取字典key列表的方法
Jul 11 Python
Pyhton中单行和多行注释的使用方法及规范
Oct 11 Python
python合并同类型excel表格的方法
Apr 01 Python
python定时关机小脚本
Jun 20 Python
python 读取摄像头数据并保存的实例
Aug 03 Python
详解python多线程之间的同步(一)
Apr 03 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
基于pytorch的lstm参数使用详解
Jan 14 Python
Django视图类型总结
Feb 17 Python
微信小程序调用python模型
Apr 21 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
微信小程序签到功能
2018/10/31 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
python复制与引用用法分析
2015/04/08 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
python如何实现反向迭代
2018/03/20 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
送给他或她的礼物:FUN.com
2018/08/17 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
企业内部培训方案
2014/02/04 职场文书
兰兰过桥教学反思
2014/02/08 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
《角的度量》教学反思
2016/02/18 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书