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 相关文章推荐
python3使用urllib模块制作网络爬虫
Apr 08 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
Python 处理数据的实例详解
Aug 10 Python
Python3编程实现获取阿里云ECS实例及监控的方法
Aug 18 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
Python中pillow知识点学习
Apr 30 Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 Python
python根据txt文本批量创建文件夹
Dec 08 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
Jun 18 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
Nov 29 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
Python的历史与优缺点整理
May 26 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在字符串中查找另一个字符串
2008/11/19 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
php格式化时间戳
2016/12/17 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
js控制input框只读实现示例
2014/01/20 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
2016/06/15 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
javascript回到顶部特效
2016/07/30 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
Js apply方法详解
2017/02/16 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
python批量导出导入MySQL用户的方法
2013/11/15 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
python查看列的唯一值方法
2018/07/17 Python
python中安装django模块的方法
2020/03/12 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
中专毕业生自我鉴定
2013/11/21 职场文书
学校运动会霸气口号
2014/06/07 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
趣味运动会口号
2015/12/24 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
Apache POI的基本使用详解
2021/11/07 Servers