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结合opencv实现人脸检测与跟踪
Jun 08 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
修改 CentOS 6.x 上默认Python的方法
Sep 06 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
python安装本地whl的实例步骤
Oct 12 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
python 回溯法模板详解
Feb 26 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
Jun 29 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
Django DRF认证组件流程实现原理详解
Aug 17 Python
python学习之panda数据分析核心支持库
May 07 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来实现一个动态Web服务器
2015/07/29 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
微信网页授权并获取用户信息的方法
2018/07/30 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
python实现在目录中查找指定文件的方法
2014/11/11 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
Python猜数字算法题详解
2020/03/01 Python
pygame实现飞机大战
2020/03/11 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
学前班教师的自我鉴定
2013/12/05 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
法人代表授权委托书
2014/04/08 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
招标授权委托书样本
2014/09/23 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
长城的导游词
2015/01/30 职场文书
2015年工程师工作总结
2015/04/30 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server