开发者

用Python实现的等差数列方式

目录
  • python实现等差数列
  • python等差数列生成器
    • 使用itertools模块生成等差数列
  • 总结

    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 函 数用于生成无穷等差数列rdpswKw。

    先来看等差数列:

    """
    等差数列实现。
    """
    
    
    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__':
    python    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):开发者_Js入门
        result = type(begin + step)(bjavascriptegin)
        forever = end is None
        index = 0
        while forever or result < end:
            yield result
            index += 1
            result = begin + step * index
    

    使用iterwww.devze.comtools模块生成等差数列

    用Python实现的等差数列方式

    然而,itertools.count 函数从不停止,因此,如果调用 list(count()),Python 会创建一 个特别大的列表,超出可用内存,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
    

    总结

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

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜