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模拟登录百度代码分享(获取百度贴吧等级)
Dec 27 Python
深入理解Python中变量赋值的问题
Jan 12 Python
使用python实现个性化词云的方法
Jun 16 Python
Python 数据处理库 pandas进阶教程
Apr 21 Python
PyTorch快速搭建神经网络及其保存提取方法详解
Apr 28 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
Python简易版图书管理系统
Aug 12 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
Python利器openpyxl之操作excel表格
Apr 17 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 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的FTP学习(二)[转自奥索]
2006/10/09 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
javascript 文档的编码问题解决
2009/03/01 Javascript
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
Bootstrap基础学习
2015/06/16 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
Python内置函数dir详解
2015/04/14 Python
python非递归全排列实现方法
2017/04/10 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
Django 前后台的数据传递的方法
2017/08/08 Python
Python数据分析库pandas基本操作方法
2018/04/08 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
python中map的基本用法示例
2018/09/10 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
python3.6实现学生信息管理系统
2019/02/21 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
数控专业个人求职信范文
2014/02/05 职场文书
保安队长职务说明书
2014/02/23 职场文书
产品生产计划书
2014/05/07 职场文书
升国旗演讲稿
2014/09/05 职场文书
2014年导购员工作总结
2014/11/18 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang