如何在嵌套列表verb_list中检索be_verb元素并区分动词单复数
实现方案
核心逻辑
先遍历每个动词组检索是否包含be助动词,再分两类处理单复数变形:
- 含be动词的词组:仅修改be动词为对应单复数形态,其余实义动词(现在分词形式)保持不变
- 不含be动词的词组:根据实义动词单三变形规则调整核心动词的形态
完整代码
# 原始输入列表 verb_list = [['was', 'playing'], ['watches'], ['guesses'], ['washes'], ['are', 'enjoying'], ['enjoy', 'playing'], ['are', 'wearing'], ['were', 'throwing']] be_verb = ['be','am','is','are','was','were','being'] # be动词单复数映射规则 be_to_singular = {'are':'is', 'were':'was', 'be':'is'} be_to_plural = {'is':'are', 'was':'were', 'be':'are'} # 实义动词转单数(单三)的规则 def get_singular_verb(verb: str) -> str: if verb.endswith(('s', 'x', 'ch', 'sh', 'o')): return verb + 'es' return verb + 's' # 主处理流程 processed_result = [] for group in verb_list: singular_group = group.copy() plural_group = group.copy() be_pos = -1 # 检索当前词组是否包含be动词 for idx, word in enumerate(group): if word in be_verb: be_pos = idx break if be_pos > -1: # 含be动词的处理逻辑 current_be = group[be_pos] if current_be in be_to_plural: singular_group[be_pos] = be_to_plural[current_be] if current_be in be_to_singular: plural_group[be_pos] = be_to_singular[current_be] else: # 不含be动词的实义动词处理逻辑 core_verb = group[0] # 判断原核心动词是否为单三形式 is_singular_form = False if core_verb.endswith('es') and core_verb[:-2].endswith(('s', 'x', 'ch', 'sh', 'o')): is_singular_form = True origin_verb = core_verb[:-2] elif core_verb.endswith('s') and not core_verb.endswith('ss'): is_singular_form = True origin_verb = core_verb[:-1] else: origin_verb = core_verb # 赋值单复数词组 if is_singular_form: singular_group[0] = core_verb plural_group[0] = origin_verb else: plural_group[0] = core_verb singular_group[0] = get_singular_verb(core_verb) # 保存当前词组的处理结果 processed_result.append({ 'original': group, 'singular': singular_group, 'plural': plural_group }) # 打印输出结果 for item in processed_result: print(f"原动词组:{item['original']}") print(f"单数动词组:{item['singular']}") print(f"复数动词组:{item['plural']}") print("-"*20)
运行输出示例
原动词组:['was', 'playing'] 单数动词组:['was', 'playing'] 复数动词组:['were', 'playing'] -------------------- 原动词组:['watches'] 单数动词组:['watches'] 复数动词组:['watch'] -------------------- 原动词组:['guesses'] 单数动词组:['guesses'] 复数动词组:['guess'] -------------------- 原动词组:['washes'] 单数动词组:['washes'] 复数动词组:['wash'] -------------------- 原动词组:['are', 'enjoying'] 单数动词组:['is', 'enjoying'] 复数动词组:['are', 'enjoying'] -------------------- 原动词组:['enjoy', 'playing'] 单数动词组:['enjoys', 'playing'] 复数动词组:['enjoy', 'playing'] -------------------- 原动词组:['are', 'wearing'] 单数动词组:['is', 'wearing'] 复数动词组:['are', 'wearing'] -------------------- 原动词组:['were', 'throwing'] 单数动词组:['was', 'throwing'] 复数动词组:['were', 'throwing'] --------------------
内容的提问来源于stack exchange,提问作者Naveen Pandia
相关产品推荐
相关产品推荐

