如何更优雅地实现按YES/NO关键字分组后续子串?
更优雅的字符串分组解决方案
需求说明
给定输入字符串:
s = """YES string1 string2 YES string3 string4 string5 YES string6 NO String7 NO string8 string9 YES string10 string11"""
需要将其转换为按YES/NO分组的字典,输出格式如下:
wanted_output = { "YES": [ "string1 string2", "string3 string4 string5", "string6", "string10 string11", ], "NO" : ["String7", "string8 string9"] }
现有实现代码可运行但逻辑较绕,以下是更优雅的解决方案:
优化后的代码
def convert(text): # 初始化分组字典,可灵活扩展其他关键字 groups = {"YES": [], "NO": []} current_key = None current_phrase = [] for word in text.split(): # 遇到分组关键字时,先处理上一组的内容 if word in groups: if current_key is not None and current_phrase: groups[current_key].append(" ".join(current_phrase)) current_phrase = [] current_key = word else: # 非关键字则加入当前短语列表 if current_key is not None: current_phrase.append(word) # 处理循环结束后剩余的最后一组内容 if current_key is not None and current_phrase: groups[current_key].append(" ".join(current_phrase)) return groups
优化点说明
- 逻辑更直观:直接跟踪当前分组和正在收集的短语,避免了原方案中用分隔符拼接再拆分的绕弯操作,可读性大幅提升
- 扩展性更强:分组逻辑通过字典统一管理,后续若新增其他分组关键字(如
MAYBE),只需修改初始化的groups字典即可 - 更健壮:原方案依赖分隔符
|,若输入字符串中包含该字符会导致错误,优化后的方案完全避免了这个风险 - 性能更优:减少了不必要的字符串拼接与拆分操作,降低了额外的计算开销
内容的提问来源于stack exchange,提问作者user2357858
相关产品推荐
相关产品推荐

