本文实例为大家分享了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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?