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 28 Python
python 获取字符串MD5值方法
May 29 Python
在Pycharm中自动添加时间日期作者等信息的方法
Jan 16 Python
python实现五子棋游戏
Jun 18 Python
Python中的类与类型示例详解
Jul 10 Python
python conda操作方法
Sep 11 Python
python 字符串常用方法汇总详解
Sep 16 Python
python pygame实现球球大作战
Nov 25 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
属性与 @property 方法让你的python更高效
Sep 21 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 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版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
laravel请求参数校验方法
2019/10/10 PHP
使用Apache的rewrite
2021/03/09 Servers
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
Python实现Linux下守护进程的编写方法
2014/08/22 Python
Python易忽视知识点小结
2015/05/25 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
python如何实现复制目录到指定目录
2020/02/13 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
基层干部十八大感言
2014/01/19 职场文书
甜点店创业计划书
2014/01/27 职场文书
食品安全处置方案
2014/06/14 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
民族精神月活动总结
2014/08/28 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python