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
相关产品推荐
相关产品推荐

