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之import机制详解
Jul 03 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
django主动抛出403异常的方法详解
Jan 04 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
Oct 28 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 Python
python3操作redis实现List列表实例
Aug 04 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警告错误信息的解决方法
2013/06/03 PHP
php断点续传之如何分割合并文件
2014/03/22 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
php5与php7的区别点总结
2019/10/11 PHP
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
Python映射拆分操作符用法实例
2015/05/19 Python
python实现Decorator模式实例代码
2018/02/09 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
详解Django 时间与时区设置问题
2019/07/23 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
艺术设计专业个人求职信范文
2013/12/11 职场文书
高二历史教学反思
2014/01/25 职场文书
数学教学随笔感言
2014/02/17 职场文书
政府四风问题整改措施
2014/10/04 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
护士岗位竞聘书
2015/09/15 职场文书
Python如何导出导入所有依赖包详解
2021/06/08 Python
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
Python装饰器的练习题
2021/11/23 Python