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

Python循环内多分支代码优化:动态处理季度变量问题

问题

现有Python代码通过if-elif分支处理不同季度(2ND/3RD/4TH)的数据,但每个分支逻辑高度重复,需要手动定义Q2_names、Q3_Pay这类季度专属变量,尝试用Q{qtr}动态命名变量没成功,想找不用重复写代码的优化方案。原代码如下:

if qtr == "2ND":
    Q2_names_e = re.findall(r'^(\d{2,4})\s+\w+\s+\w+', text, re.MULTILINE)
    Q2_names.append(Q2_names_e)
    lines = text.split('\n')
    df1 = pd.DataFrame([line.split() for line in lines])
    for index, row in df1.iterrows():
        if row[1] == 'EARNINGS:':
            Q2_Pay_e =row[3]
            Q2_Pay.append(Q2_Pay_e)
elif qtr == "3RD":
    Q3_names_e = re.findall(r'^(\d{2,4})\s+\w+\s+\w+', text, re.MULTILINE)
    Q3_names.append(Q3_names_e)
    lines = text.split('\n')
    df2 = pd.DataFrame([line.split() for line in lines])
    for index, row in df2.iterrows():
        if row[1] == 'EARNINGS:':
            Q3_Pay_e =row[3]
            Q3_Pay.append(Q3_Pay_e)
elif qtr == "4TH":
    Q4_names_e = re.findall(r'^(\d{2,4})\s+\w+\s+\w+', text, re.MULTILINE)
    Q4_names.append(Q4_names_e)
    lines = text.split('\n')
    df3 = pd.DataFrame([line.split() for line in lines])
    for index, row in df3.iterrows():
        if row[1] == 'EARNINGS:':
            Q4_Pay_e =row[3]
            Q4_Pay.append(Q4_Pay_e)
else:
    break      
解决方案

别用动态命名变量,改用字典来存储各季度数据,能彻底统一逻辑,消除重复代码。优化后的代码如下:

# 初始化字典,代替原来零散的Q2_names/Q3_Pay等变量
quarter_data = {
    "2": {"names": [], "pay": []},
    "3": {"names": [], "pay": []},
    "4": {"names": [], "pay": []}
}

# 提取季度数字(比如从"2ND"拿到"2")
qtr_num = qtr[:1]
# 不是目标季度就直接跳出
if qtr_num not in quarter_data:
    break

# 统一执行所有季度的处理逻辑
names_e = re.findall(r'^(\d{2,4})\s+\w+\s+\w+', text, re.MULTILINE)
quarter_data[qtr_num]["names"].append(names_e)

lines = text.split('\n')
df = pd.DataFrame([line.split() for line in lines])
for _, row in df.iterrows():
    if row[1] == 'EARNINGS:':
        pay_e = row[3]
        quarter_data[qtr_num]["pay"].append(pay_e)

优化说明

  • 用字典quarter_data按季度数字分类存储数据,既避免了手动定义一堆变量,也绕开了动态命名变量的坑(Python里不推荐动态命名变量,字典是更规范的做法)
  • 所有季度的处理逻辑完全一致,后续要加1季度的话,只需要在字典里加个"1": {"names": [], "pay": []}就行,不用改逻辑代码
  • 删掉了重复的正则匹配、文本分割、DataFrame创建等代码,整体更简洁,维护起来也方便

内容的提问来源于stack exchange,提问作者Dmata

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:55:17