Python 生成序列的算法

Python 生成序列的算法,python,algorithm,matlab,Python,Algorithm,Matlab,我有一个场景,其中给出了两个数字。我不断地在不同的层次上找到它们的平均值或某些函数 例如: Input I = 2, 64 I1=2, 33=f(2,64), 64 I1=2, 33, 64 I2=2, 17=f(2,33), 33, 49=f(33,64), 64 I2=2,17,33,49,64 I3=2,9=f(2,17),17,25=f(17,33),33,41=f(33,49),49,57=f(49,64),64 I3=2,9,17,25,33,41,49,57,64 在第一次迭代

我有一个场景,其中给出了两个数字。我不断地在不同的层次上找到它们的平均值或某些函数

例如:

Input I = 2, 64
I1=2, 33=f(2,64), 64
I1=2, 33, 64
I2=2, 17=f(2,33), 33, 49=f(33,64), 64 
I2=2,17,33,49,64
I3=2,9=f(2,17),17,25=f(17,33),33,41=f(33,49),49,57=f(49,64),64
I3=2,9,17,25,33,41,49,57,64
在第一次迭代中,应用函数f(2,64)来查找中间值——在本例中为33。然后写出结果系列;现在有三个元素很长。在下一步中,将函数应用于(2,33)得到17,应用于(33,64)得到49。等等编辑来自Floris的帮助

有没有算法可以有效地对其进行编码

from itertools import izip_longest

def apply_pairwise(lst, f, loops=1):
    if loops == 0:
        return lst
    new_lst = [f(a,b) for a,b in zip(lst, lst[1:])]
    next_lst = [e for t in izip_longest(lst, new_lst) for e in t if e]
    return apply_pairwise(next_lst, f, loops-1)
然后,您可以指定要使用的两两函数,该函数接受两个值

>>> apply_pairwise([2, 64], lambda x,y: (x+y)/2.0, 3)
[2, 9.75, 17.5, 25.25, 33.0, 40.75, 48.5, 56.25, 64]

我们应该什么时候终止?这被标记为“python”和“matlab”,但看起来两者都不是。
33=f(2,64)
etc是什么意思?@Floris表示平均函数。可以在任何级别终止。标记python和matlab,因为使用它们编码的人可能会遇到这个问题。33=f(2,64)表示“f”是一个输入为2,64,输出为33的函数。“f”可以是任何函数,比如平均值、最小值、最大值——我想我看到了。在第一次迭代中,应用函数f(2,64)来查找中间值——在本例中为33。然后写出结果系列;现在有三个元素很长。在下一步中,将函数应用于(2,33)得到17,应用于(33,64)得到49。等等。