Python中生成等差数列与等比数列的多种实现方式
本文介绍Python中生成等差数列和等比数列的多种方法。重点讲解numpy库中linspace与arange的区别,以及利用itertools模块结合takewhile实现无穷数列截断的技巧。同时对比了传统类实现__iter__与生成器函数的优劣,提供高效且简洁的代码示例。
使用numpy生成等差与等比数列
具体实现代码如下所示:
import numpy as np
# 等差数列
print(np.linspace(0.1, 1, 10, endpoint=True))
print(np.arange(0.1, 1.1, 0.1))
"""总结:
arange 侧重点在于增量,不管产生多少个数
linspace 侧重于num, 即要产生多少个元素,不在乎增量
"""
# 等比数列
np.logspace(1, 4, 4, endpoint=True, base=2) # 2**1---2**4
Python等差数列生成器的代码实现
补充拓展:Python等差数列生成器的代码实现
迭代器模式的核心作用在于遍历数据结构。然而,其价值不仅限于从集合中提取元素,当需要即时生成序列中的下一个值时,这种基于标准方法接口的迭代器模式同样适用。例如,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模块生成等差数列

然而,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生成等差数列和等比数列的实例分享完毕,希望能为读者提供参考,并欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









