验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

怎么用Python实现等差数列

阅读:959 来源:乙速云 作者:代码code

怎么用Python实现等差数列

      Python实现等差数列

      def arithemtic_sequence_based_generator(first=0, step=1, sequence_count=10):
          for index in range(0, sequence_count):
              yield first + index * step
              index += 1
      
      if __name__ == "__main__":
          generator = arithemtic_sequence_based_generator(first=0, step=5, sequence_count=10)
          for number in generator:
              print(number, end=" ")

      运行结果:

      0 5 10 15 20 25 30 35 40 45 

      python等差数列生成器

      典型的迭代器模式作用很简单——遍历数据结构。

      不过,即便不是从集合中获取元素,而 是获取序列中即时生成的下一个值时,也用得到这种基于方法的标准接口。

      例如,内置的 range 函数用于生成有穷整数等差数列(Arithmetic Progression,AP), itertools.count 函 数用于生成无穷等差数列。

      先来看等差数列:

      """
      等差数列实现。
      """
      
      
      class ArithmeticProgression:
      
          def __init__(self, begin, step, end=None):
              self.begin = begin
              self.step = step
              self.end = end   # None -> 无穷数列
      
          def __iter__(self):
              result = type(self.begin + self.step)(self.begin)
              forever = self.end is None
              index = 0
              while forever or result < self.end:
                  yield result
                  index += 1
                  result = self.begin + self.step * index
      
      
      if __name__ == '__main__':
          ap = ArithmeticProgression(0, 1, 3)
          print(ap)
          # print(list(ap))
          a = iter(ap)
          print(next(a))

      这是个简单的示例,说明了如何使用生成器函数实现特殊的 __iter__ 方法。

      然而,如果一个类只是为了构建生成器而去实现 __iter__ 方法,那还不如使用生成器函数

      毕竟,生成器函数是制造生成器的 工厂。

      def aritprog_gen(begin, step, end=None):
          result = type(begin + step)(begin)
          forever = end is None
          index = 0
          while forever or result < end:
              yield result
              index += 1
              result = begin + step * index

      使用itertools模块生成等差数列

      怎么用Python实现等差数列

      然而,itertools.count 函数从不停止,因此,如果调用 list(count()),Python 会创建一 个特别大的列表,超出可用内存,在调用失败之前,电脑会疯狂地运转。

      不过,itertools.takewhile 函数则不同,它会生成一个使用另一个生成器的生成器,在指 定的条件计算结果为 False 时停止。因此,可以把这两个函数结合在一起使用,编写下述 代码:

      怎么用Python实现等差数列

      利用 takewhilecount 函数,写出的代码流畅而简短。

      import itertools 
      
      
      # 注意,下面示例中的 aritprog_gen 不是生成器函数,
      # 因为定义体中没有 yield 关键字。
      # 但是它会返回一个生成器,
      # 因此它与其他生成器函数一样,
      # 也是生成器工厂函数。
      def aritprog_two_gen(begin, step, end=None):
          first = type(begin + step)(begin)
          ap_gen = itertools.count(first, step)
          if end is not None:
              ap_gen = itertools.takewhile(lambda n: n < end, ap_gen)
          return ap_gen
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>