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

如何精简处理Pandas列的Python函数compare_locality的if语句

精简compare_locality函数的方案

这代码重复得确实让人头疼,我来帮你把它精简一下,同时严格满足你提到的顺序判断逻辑——也就是按s0到s12的顺序检查,只有当前面所有的s都不为空时才会检查下一个,一旦遇到空的s就停止后续处理。

核心思路

原代码的问题在于手动重复了13次几乎完全一样的判断逻辑,我们可以通过将s和对应的loc配对成可迭代的集合,用循环来替代重复的if语句,这样既精简了代码,也让后续维护(比如新增s13)变得更简单。

优化后的代码

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 = []
    # 将s和对应的loc打包成元组列表,保持顺序
    s_loc_pairs = [
        (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)
    ]
    
    for s, sloc in s_loc_pairs:
        if s == '':
            # 遇到空的s,立即停止后续检查(满足顺序判断逻辑)
            break
        loc.append(sloc)
    
    return compare(p_loc, *loc) if loc else ''

代码说明

  1. 配对处理:把每一组s和s_loc打包成元组,放入列表中,这样就能用循环统一处理所有的判断逻辑,避免重复代码。
  2. 顺序判断:循环过程中,一旦遇到某个s为空,就用break终止循环,后面的s1到s12都不会再检查,完全符合你要求的“仅当前面所有s不为空才检查下一个”的逻辑。
  3. 简洁返回:用三元表达式替代原有的if-else判断,让返回逻辑更紧凑。

如果之后需要新增更多的s(比如s13和s13_loc),只需要在s_loc_pairs列表里添加对应的元组即可,不需要修改其他代码,扩展性比原代码好很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:30:34