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 图片验证码代码分享
Jul 04 Python
python八大排序算法速度实例对比
Dec 06 Python
Python数据分析matplotlib设置多个子图的间距方法
Aug 03 Python
Python对切片命名的实现方法
Oct 16 Python
PyCharm设置护眼背景色的方法
Oct 29 Python
启动Atom并运行python文件的步骤
Nov 09 Python
对python多线程与global变量详解
Nov 09 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
Python测试线程应用程序过程解析
Dec 31 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
高考要来啦!用Python爬取历年高考数据并分析
Jun 03 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为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
解析php防止form重复提交的方法
2013/07/01 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
2020/06/01 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
怎样写好自我鉴定
2013/12/04 职场文书
《秋姑娘的信》教学反思
2014/02/28 职场文书
民生工程实施方案
2014/03/22 职场文书
市场营销战略计划书
2014/05/06 职场文书
留学经费担保书
2014/05/12 职场文书
个人委托书范本
2014/09/13 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
领导离职感言
2015/08/03 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
python执行js代码的方法
2021/05/13 Python
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python