Python字符串切片比较时条件分支命中异常如何解决
问题原因
判断分支的顺序存在逻辑漏洞:字符串enc_english的前2位本身就是en,代码中先执行item[:2] == "en"判断时,所有以en开头的字符串都会直接命中第一个分支,后续的enc前缀判断逻辑根本不会被触发。
修复方法
方法1:调整判断优先级,优先匹配更长的前缀
把长度更长的前缀判断放在分支最前面,避免短前缀提前拦截匹配结果:
string = ["en_english","enc_english"] for item in string: # 先匹配长度3的enc前缀,再匹配长度2的en前缀 if item[:3] == "enc": print(item, "is selected") elif item[:2] == "en": print("selected item : ",item)
运行后输出符合预期:
selected item : en_english enc_english is selected
方法2:使用内置前缀匹配方法,增加边界校验
直接调用Python字符串内置的startswith()方法做前缀判断,同时给en分支增加边界校验,确认en后面跟的是下划线,从规则上避免误匹配:
string = ["en_english","enc_english"] for item in string: if item.startswith("en_"): print("selected item : ",item) elif item.startswith("enc_"): print(item, "is selected")
这种写法不需要手动计算切片长度,可读性更高,也不容易出现下标计算错误。
内容的提问来源于stack exchange,提问作者tckraomuqnt
相关产品推荐
相关产品推荐

