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+matplotlib绘制3D条形图实例代码
Jan 17 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
python datetime时间格式的相互转换问题
Jun 11 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 Python
使用pandas模块实现数据的标准化操作
May 14 Python
Python实现为PDF去除水印的示例代码
Apr 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 程序员应该使用的10个组件
2009/10/31 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
js类中获取外部函数名的方法
2007/08/19 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
Python通过Pillow实现图片对比
2020/04/29 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
2014年毕业演讲稿范文
2014/05/13 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
家长评语怎么写
2014/12/30 职场文书
医院营销工作计划
2015/01/16 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
Django实现翻页的示例代码
2021/05/24 Python
深入浅析Django MTV模式
2021/09/04 Python
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏