python - 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)
任何人都可以帮助如何编写这个,假设有某种循环和范围函数可以应用在这里?
解决方案
您实际上正在做的是将数字列表中的值乘以从 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) ]
推荐阅读
- visual-studio-code - 无法通过 SSH 连接到 VSC 上的远程主机 - MACOS
- amazon-web-services - Spring Boot 多模块应用程序上的 Heroku 与 AWS Elastic Beanstalk
- python - 如何正确加载 caffemodel 以进行性别和年龄检测?
- webpack - core-js iterable-dom-collections 将被导入,但我无法使用 foreach 遍历 DOM Collection
- reactjs - 自定义 antD Drawer 和 onClose 不起作用
- html - 我们可以使用 CSS 制作这个形状吗
- c# - Azure 功能不在本地启动
- json - 如何将任何飞镖对象序列化为 json?
- javascript - PyQt5 如何使用 JavaScript 模块
- javascript - 如何使用滚动内容制作固定页脚模式?