在多个列表中按AND条件匹配字符串的if语句优化咨询
优化方案1:使用any()聚合逻辑(最推荐)
你可以先把所有需要校验的目标字符串统一放到一个列表里,再用any()函数批量判断是否存在至少一个满足条件的字符串:
# 提前定义所有需要校验的候选字符串,后续新增变体直接在这里加即可 TARGET_STRINGS = ["example_string", "string_similar_to_example_string"] if any(s in node and s in node_names for s in TARGET_STRINGS): return response
这种写法的优势:
- 逻辑和数据分离,所有待匹配的字符串集中管理,后续增删变体不需要修改判断逻辑
- 语义直白,一眼就能看懂核心规则是「只要有一个目标串同时在node和node_names里就满足条件」
- 没有冗余的重复判断逻辑,代码量大幅缩减
优化方案2:封装为独立判断函数(适合多场景复用)
如果这个校验逻辑会在多个地方用到,可以把它封装成单独的工具函数,调用时可读性更强:
def has_matching_string(targets, node, node_names): return any(s in node and s in node_names for s in targets) # 调用处 TARGET_STRINGS = ["example_string", "string_similar_to_example_string"] if has_matching_string(TARGET_STRINGS, node, node_names): return response
额外性能优化提示
如果node_names的元素量很大、或者这个判断会被高频调用,可以提前把node_names转成集合来降低in操作的时间复杂度(列表的in操作是O(n),集合是O(1)):
# 仅需转换一次即可,不需要每次判断都重复转换 node_name_set = set(node_names) if any(s in node and s in node_name_set for s in TARGET_STRINGS): return response
内容的提问来源于stack exchange,提问作者leslieknope
相关产品推荐
相关产品推荐

