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打开网页和暂停实例
Sep 30 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
Python编写电话薄实现增删改查功能
May 07 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
一道python走迷宫算法题
Jan 22 Python
Python3爬虫学习入门教程
Dec 11 Python
Pycharm设置utf-8自动显示方法
Jan 17 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
Django框架使用mysql视图操作示例
May 15 Python
django表单的Widgets使用详解
Jul 22 Python
浅谈Python项目的服务器部署
Apr 25 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 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基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
Django和Flask框架优缺点对比
2019/10/24 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
python如何快速拼接字符串
2020/10/28 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
职业生涯规划怎么写
2013/12/29 职场文书
创建文明学校实施方案
2014/03/11 职场文书
党在我心中演讲稿
2014/09/02 职场文书
骨干教师申报材料
2014/12/17 职场文书
赡养老人协议书范本
2015/08/06 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
十个Python自动化常用操作,即拿即用
2021/05/10 Python