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中使用enumerate函数遍历元素实例
Jun 16 Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
小米5s微信跳一跳小程序python源码
Jan 08 Python
Tensorflow环境搭建的方法步骤
Feb 07 Python
Python pymongo模块用法示例
Mar 31 Python
利用python实现对web服务器的目录探测的方法
Feb 26 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
python中必要的名词解释
Nov 20 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 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
php 函数使用方法与函数定义方法
2010/05/09 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
php接口隔离原则实例分析
2019/11/11 PHP
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
ng-alain表单使用方式详解
2018/07/10 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
Python 装饰器深入理解
2017/03/16 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
Python 闭包的使用方法
2017/09/07 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
python中property和setter装饰器用法
2019/12/19 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
django 模版关闭转义方式
2020/05/14 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
快速创建python 虚拟环境
2020/11/28 Python
六一儿童节活动策划方案
2014/01/27 职场文书
学生会招新策划书
2014/02/14 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
邓小平文选读书笔记
2015/06/29 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
爱护环境建议书
2015/09/14 职场文书