用Python实现的等差数列方式

 更新时间:2022年12月16日 16:06:36   作者:ztenv  
这篇文章主要介绍了用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模块生成等差数列

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

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

利用 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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python的join函数的用法及实例

    Python的join函数的用法及实例

    这篇文章主要详细介绍了python的join函数的用法及实例,文章中有详细的代码讲解,有一定的参考价值,需要的同学可以参考阅读
    2023-04-04
  • python从入门到精通(DAY 1)

    python从入门到精通(DAY 1)

    本文是此次python从入门到精通系列文章的第一篇,给大家汇总一下常用的Python的基础知识,非常的简单,但是很全面,有需要的小伙伴可以参考下
    2015-12-12
  • Keras 如何修改图片通道的顺序

    Keras 如何修改图片通道的顺序

    这篇文章主要介绍了Keras 修改图片通道顺序的操作方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python学习之Anaconda的使用与配置方法

    Python学习之Anaconda的使用与配置方法

    我在学习Python的爬虫框架中看到看到了anaconda的介绍,简直是相见恨晚啊,我觉的每个Python的学习网站上首先都应该使用anaconda来进行教程,因为在实践的过程中光环境的各种报错就能消磨掉你所有的学习兴趣
    2018-01-01
  • python引入其他文件夹下的py文件具体方法

    python引入其他文件夹下的py文件具体方法

    在本篇文章里小编给大家整理的是一篇关于python引入其他文件夹下的py文件具体方法,有兴趣朋友们可以跟着学习参考下。
    2021-05-05
  • Python直接赋值与浅拷贝和深拷贝实例讲解使用

    Python直接赋值与浅拷贝和深拷贝实例讲解使用

    浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联
    2022-11-11
  • Python如何实现macOS系统代理的设置

    Python如何实现macOS系统代理的设置

    这篇文章主要为大家详细介绍了Python如何实现macOS系统代理的设置,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • Python实现周期性抓取网页内容的方法

    Python实现周期性抓取网页内容的方法

    这篇文章主要介绍了Python实现周期性抓取网页内容的方法,涉及Python时间函数及正则匹配的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • 手把手带你了解Python数据分析--matplotlib

    手把手带你了解Python数据分析--matplotlib

    这篇文章主要介绍了Python实现matplotlib显示中文的方法,结合实例形式详细总结分析了Python使用matplotlib库绘图时显示中文的相关操作技巧与注意事项,需要的朋友可以参考下
    2021-08-08
  • Matlab求解数组中的最大值及它所在的具体位置

    Matlab求解数组中的最大值及它所在的具体位置

    这篇文章主要介绍了Matlab求解数组中的最大值及它所在的具体位置,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论