如何用Python计算列表中日期数值的百分比差异?
问题描述
我从数据库获取了两个格式为"日期:数值"的字符串列表:
test_list_1 = ['01/01/2022:79.86','02/01/2022:65.86','03/01/2022:600.23','04/01/2022:179.26'] test_list_2 = ['01/01/2022:55.86','02/01/2022:25.75','03/01/2022:300.23']
需要生成列表中每一对元素的日期、数值及两者间的百分比差异输出,示例如下:
# Output of test_list_1 01/01/2022 (79.86) => 02/01/2022 (65.86) => Percentage Diff (-17%) 01/01/2022 (79.86) => 03/01/2022 (600.23) => Percentage Diff (+651%) 01/01/2022 (79.86) => 04/01/2022 (179.26) => Percentage Diff (+124%) 02/01/2022 (65.86) => 03/01/2022 (600.23) => Percentage Diff (+811%) 02/01/2022 (65.86) => 04/01/2022 (179.26) => Percentage Diff (+172%) 03/01/2022 (600.23) => 04/01/2022 (179.26) => Percentage Diff (-70%) # Output of test_list_2 01/01/2022 (55.86) => 02/01/2022 (25.75) => Percentage Diff (-53%) 01/01/2022 (55.86) => 03/01/2022 (300.23) => Percentage Diff (+437%) 02/01/2022 (25.75) => 03/01/2022 (300.23) => Percentage Diff (+1065%)
求入门级实现指导。
实现步骤与代码
逻辑拆解
- 解析原始字符串:将每个"日期:数值"字符串拆分,转换为日期文本+浮点数值的格式,便于后续计算。
- 生成元素对:遍历列表,生成所有单向不重复的两两组合(仅计算前序元素到后序元素的差异,避免重复计算)。
- 计算百分比差异:用公式
((后值 - 前值) / 前值) * 100计算差异,取整后添加正负符号。 - 格式化输出:按照示例格式拼接日期、数值和差异结果。
完整代码
def calculate_and_print_diff(data_list): # 解析列表元素为(日期, 数值)元组 parsed_data = [] for item in data_list: date_part, value_part = item.split(':') parsed_data.append( (date_part, float(value_part)) ) # 生成所有单向元素对并计算差异 total_items = len(parsed_data) for i in range(total_items): date1, val1 = parsed_data[i] for j in range(i + 1, total_items): date2, val2 = parsed_data[j] # 计算百分比差异并取整 diff_percent = ((val2 - val1) / val1) * 100 rounded_diff = round(diff_percent) # 处理符号:正数加+,负数保留- sign = '+' if rounded_diff > 0 else '' # 格式化输出行 output_line = f"{date1} ({val1:.2f}) => {date2} ({val2:.2f}) => Percentage Diff ({sign}{rounded_diff}%)" print(output_line) # 处理第一个列表 print("# Output of test_list_1") test_list_1 = ['01/01/2022:79.86','02/01/2022:65.86','03/01/2022:600.23','04/01/2022:179.26'] calculate_and_print_diff(test_list_1) # 处理第二个列表 print("\n# Output of test_list_2") test_list_2 = ['01/01/2022:55.86','02/01/2022:25.75','03/01/2022:300.23'] calculate_and_print_diff(test_list_2)
关键说明
- 拆分字符串用
split(':'),确保日期和数值分离; - 嵌套循环
range(i+1, total_items)保证只生成前到后的单向组合,避免重复; - 若数据库返回的数值可能为0,需添加除数不为0的判断,避免报错;
round()函数取整,和示例输出的整数百分比保持一致。
内容的提问来源于stack exchange,提问作者Boston Whaler
相关产品推荐
相关产品推荐

