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中截取字符函数strip,lstrip,rstrip
Jul 17 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
基于Django用户认证系统详解
Feb 21 Python
pandas数值计算与排序方法
Apr 12 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 Python
python同时替换多个字符串方法示例
Sep 17 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
python实现图书馆抢座(自动预约)功能的示例代码
Sep 29 Python
Python hashlib和hmac模块使用方法解析
Dec 08 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
destoon之一键登录设置
2014/06/21 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
js资料prototype 属性
2007/03/13 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
vue实现评价星星功能
2020/06/30 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
python中__slots__用法实例
2015/06/04 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
使用python生成目录树
2018/03/29 Python
python爬取网易云音乐评论
2018/11/16 Python
django框架两个使用模板实例
2019/12/11 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
会话Bean的种类
2013/11/07 面试题
实习生单位鉴定意见
2013/12/04 职场文书
英文简历自荐信范文
2013/12/11 职场文书
高一地理教学反思
2014/01/18 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
学生退学证明
2015/06/23 职场文书
社区服务活动感想
2015/08/11 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL