首页 > 解决方案 > Python中是否有一个函数可以将一个数字乘以另一个X倍并产生总和?见描述

问题描述

本质上,我有一个数字列表[5,2,4],我想乘以 0.5 x 次数并得到总和,其中次数也在 list 中给出[3,5,7]

取两个列表的第一个元素的 5 和 3,它将是(5*0.5) + (2.5*0.5) + (1.25 *0.5)

任何人都可以帮助如何编写这个,假设有某种循环和范围函数可以应用在这里?

标签: python

解决方案


您实际上正在做的是将数字列表中的值乘以从 1 到其他列表中指定的幂的基数 (0.5) 的幂的总和。

您可以使用数学公式将每个功率级别转换为乘数值,并将该乘数值应用于数字列表

numbers = [5,2,4]
powers  = [3,5,7]
base    = 0.5

result = [ n * base * (base**p-1)/(base-1) for n,p in zip(numbers,powers) ]

print(result) # [4.375, 1.9375, 3.96875]

幂和的公式与我们用来表示任何基数的数字的原理相同。

这意味着基数的第一个p次方之和(从零开始)将是:

(base**p-1)/(base-1)

例如,10 的前 5 个幂的总和将由下式给出:

(10**5-1)/9= 11111

这相当于10**0 + 10**1 + 10**2 + 10**3 + 10**4

由于这个公式是从零开始的,因此包括了底数的零次方,我们可以将它乘以底数以获得所需的结果:

base*(base**p-1)/(base-1)

在上面的示例中,这相当于:

10**1 + 10**2 + 10**3 + 10**4 + 10**5= 111110

请注意,如果您不想使用数学推理,则可以使用列表推导式获得幂并在该列表上使用 sum。这会降低效率,但也可以用一行来表示:

[ sum(n*base**i for i in range(1,p+1)) for n,p in zip(numbers,powers) ]

推荐阅读