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 23 Python
python利用beautifulSoup实现爬虫
Sep 29 Python
六个窍门助你提高Python运行效率
Jun 09 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
解决python3插入mysql时内容带有引号的问题
Mar 02 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
python实现网页录音效果
Oct 26 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 Python
python实现简单聊天功能
Jul 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中file_put_contents追加和换行的实现方法
2017/04/01 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
PHP字符串与数组处理函数用法小结
2020/01/07 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
jqPlot Option配置对象详解
2009/07/25 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
用python 制作图片转pdf工具
2015/01/30 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
python中np是做什么的
2020/07/21 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
高中家长寄语
2014/04/02 职场文书
优秀教研组申报材料
2014/12/26 职场文书
 Python 中 logging 模块使用详情
2022/03/03 Python