You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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%)

求入门级实现指导。

实现步骤与代码

逻辑拆解

  1. 解析原始字符串:将每个"日期:数值"字符串拆分,转换为日期文本+浮点数值的格式,便于后续计算。
  2. 生成元素对:遍历列表,生成所有单向不重复的两两组合(仅计算前序元素到后序元素的差异,避免重复计算)。
  3. 计算百分比差异:用公式((后值 - 前值) / 前值) * 100计算差异,取整后添加正负符号。
  4. 格式化输出:按照示例格式拼接日期、数值和差异结果。

完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:20:42