怎么用Python实现等差数列
今天小编给大家分享一下怎么用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 += 1if __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 * indexif __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 时停止。因此,可以把这两个函数结合在一起使用,编写下述 代码:
利用 takewhile
和 count
函数,写出的代码流畅而简短。
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实现等差数列”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341