Skip to main content
 首页 » 编程设计

python之最小化python函数中的if语句

2025年05月04日11小虾米

我有以下函数,它从 pandas 数据框列中获取值并提供参数(s0_loc、s1_loc、.. upto ..、s12_loc 当且仅当它们各自的 s0、s1、s2...、s12 不为空时) 到另一个函数。此外,当且仅当 s0 不为空时,它才会检查 s1 是否为空...同样,如果 s0、s1 不为空,它将检查 s2 是否为空...等等...

基于以上标准,我编写了以下函数。但它是冗长的功能......我想减少这个功能中的代码段。

def compare_locality(p,p_loc,s0,s0_loc,s1,s1_loc,s2,s2_loc,s3,s3_loc,s4,s4_loc,s5,s5_loc,s6,s6_loc,s7,s7_loc,s8,s8_loc,s9,s9_loc,s10,s10_loc,s11,s11_loc,s12,s12_loc): 
    loc = [] 
    if s0 != '' : 
        loc.append(s0_loc) 
        if s1 != '' : 
            loc.append(s1_loc) 
            if s2 != '' : 
                loc.append(s2_loc) 
                if s3 != '' : 
                    loc.append(s3_loc) 
                    if s4 != '' : 
                        loc.append(s4_loc) 
                        if s5 != '' : 
                            loc.append(s5_loc) 
                            if s6 != '' : 
                                loc.append(s6_loc) 
                                if s7 != '' : 
                                    loc.append(s7_loc) 
                                    if s8 != '' : 
                                        loc.append(s8_loc) 
                                        if s9 != '' : 
                                            loc.append(s9_loc) 
                                            if s10 != '' : 
                                                loc.append(s10_loc) 
                                                if s11 != '' : 
                                                    loc.append(s11_loc) 
                                                    if s12 != '' : 
                                                        loc.append(s12_loc) 
if len(loc) == 0: 
    return '' 
else: 
    return compare(p_loc,*loc) 

我可以就如何实现这一目标获得任何建议吗?

请您参考如下方法:

为了配合 Sandeep 的回答,您可以从庞大的参数列表中在本地构建两个列表:

def compare_locality(p,p_loc,s0,s0_loc,s1,s1_loc,s2,s2_loc,s3,s3_loc,s4,s4_loc,s5,s5_loc,s6,s6_loc,s7,s7_loc,s8,s8_loc,s9,s9_loc,s10,s10_loc,s11,s11_loc,s12,s12_loc): 
    locs = [] 
    ss = [s0, s1, s2, ..., s12] 
    s_locs = [s0_loc, ..., s12_loc] 
    for s, s_loc in zip(ss, s_locs): 
        if s == '': 
            break 
        locs.append(s_loc) 
 
if len(locs) == 0: 
    return '' 
else: 
    return compare(p_loc,*locs)