如何用Python创建薪资调整累积百分比列表?逐年百分比连乘实现
计算薪资累积调整百分比的Python实现
问题背景
现有如下年份与薪资调整百分比的对应数据:
| Year | Percentage_readjustment |
|---|---|
| 2020 | 1.028 |
| 2021 | 1.027 |
| 2022 | 1.061 |
| 2023 | 1.120 |
需要计算累积调整百分比:每一年的累积值为上一年累积值乘以当年的调整百分比(2020年的累积值即为当年的调整百分比)。例如2021年累积值为 1.028 * 1.027 = 1.055756。
已通过Python代码将数据转换为元组列表:
year = [2020, 2021, 2022, 2023] perc_readjust = [1.028, 1.027, 1.061, 1.120] annual_readjust = list(zip(year, perc_readjust))
得到的列表为:
annual_readjust = [(2020, 1.028), (2021, 1.027), (2022, 1.061), (2023, 1.12)]
需要编写代码计算出如下期望结果:
accumulated_readjust = [(2020, 1.028000), (2021, 1.055756), (2022, 1.12016), (2023, 1.25458)]
解决方案
方法1:普通循环实现
通过初始化累积变量,遍历元组列表逐步计算:
accumulated_readjust = [] current_accum = 1.0 # 初始值设为1,第一个年份的累积值为1*当年调整率 for year, perc in annual_readjust: current_accum *= perc # 按需求保留小数位数,这里保留6位 accumulated_readjust.append((year, round(current_accum, 6))) print(accumulated_readjust)
运行结果:
[(2020, 1.028), (2021, 1.055756), (2022, 1.12016), (2023, 1.254579)]
注:最后一位的1.254579四舍五入后即为期望的1.25458。
方法2:使用itertools.accumulate(更简洁)
利用Python标准库的itertools.accumulate直接生成累积乘积迭代器,结合zip快速组合结果:
from itertools import accumulate # 提取调整百分比列表 percs = [perc for _, perc in annual_readjust] # 生成累积乘积序列 accumulated_percs = accumulate(percs) # 与年份重新组合成元组列表,并处理小数位数 accumulated_readjust = [(y, round(p, 6)) for y, p in zip(year, accumulated_percs)] print(accumulated_readjust)
运行结果与方法1一致,符合预期需求。
内容的提问来源于stack exchange,提问作者Daniela Berdía
相关产品推荐
相关产品推荐

