python如何实现反向迭代

 更新时间:2018年03月20日 10:41:00   作者:北门吹雪  
这篇文章主要为大家详细介绍了python如何实现反向迭代,进行反向迭代,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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网络编程之多线程同时接受和发送

    这篇文章主要为大家详细介绍了python网络编程之多线程同时接受和发送,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • python实现指定文件夹下的指定文件移动到指定位置

    python实现指定文件夹下的指定文件移动到指定位置

    这篇文章主要为大家详细介绍了python实现指定文件夹下的指定文件移动到指定位置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 使用Python读写及压缩和解压缩文件的示例

    使用Python读写及压缩和解压缩文件的示例

    Python的os模块中提供了基本的文件读写方法,而zipfile模块则针对文件的压缩和解压缩操作,这里我们就来看一下使用Python读写及压缩和解压缩文件的示例:
    2016-07-07
  • python3的UnicodeDecodeError解决方法

    python3的UnicodeDecodeError解决方法

    这篇文章主要介绍了python3的UnicodeDecodeError解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Python3实现的判断环形链表算法示例

    Python3实现的判断环形链表算法示例

    这篇文章主要介绍了Python3实现的判断环形链表算法,涉及Python针对环形链表的遍历、判断相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • Python简单实现子网掩码转换的方法

    Python简单实现子网掩码转换的方法

    这篇文章主要介绍了Python简单实现子网掩码转换的方法,涉及Python字符串相关操作技巧,需要的朋友可以参考下
    2016-04-04
  • Python入门之布尔值详解

    Python入门之布尔值详解

    Python中布尔值(Booleans)表示以下两个值之一:True或False。本文主要介绍布尔值(Booleans)的使用,和使用时需要注意的地方,需要的可以参考一下
    2023-02-02
  • Numpy中创建数组的9种方式小结

    Numpy中创建数组的9种方式小结

    本文主要介绍了Numpy中创建数组的9种方式小结,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • python3 实现一行输入,空格隔开的示例

    python3 实现一行输入,空格隔开的示例

    今天小编就为大家分享一篇python3 实现一行输入,空格隔开的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python getopt模块处理命令行选项实例

    Python getopt模块处理命令行选项实例

    这篇文章主要介绍了Python getopt模块处理命令行选项实例,本文讲解相对简单,需要的朋友可以参考下
    2014-05-05

最新评论