如何在二维列表中替换指定单词的首次出现并返回对应标签?
解决首次匹配并修改二维列表的问题
嘿,我来帮你搞定这个需求!先看看你现有代码里的几个小问题:
- 你用了
list.pop(i),这会直接把整个匹配到的子列表从原列表里删掉,后面再访问list[i]肯定会出索引错误,因为列表长度已经变短了 - 变量名用了
list,这可是Python的内置类型名,最好换个别的名字比如word_list,避免覆盖内置类型导致意外问题 - 你最后赋值的是
"deletedword",但需求里是要改成"deleted"
下面是完全符合你需求的正确实现:
# 定义原始二维列表,避开内置类型名list word_list = [['a', 'word'], ['University', 'org'], ['of', 'org'], ['Michigan', 'org'], ['Michigan', 'country']] target_word = "Michigan" found_tag = None # 用enumerate同时获取索引和子列表,方便后续修改 for idx, item in enumerate(word_list): current_word, tag = item # 不区分大小写的匹配逻辑 if current_word.lower() == target_word.lower(): found_tag = tag # 直接修改当前子列表的第一个元素为"deleted" word_list[idx][0] = "deleted" break # 找到第一个匹配项就停止遍历,保证只修改首次出现的 # 输出结果验证 print(f"首次匹配到的标签: {found_tag}") print("修改后的列表:") print(word_list)
运行这段代码后,你会得到完全符合预期的结果:
首次匹配到的标签: org 修改后的列表: [['a', 'word'], ['University', 'org'], ['of', 'org'], ['deleted', 'org'], ['Michigan', 'country']]
这里的核心思路是用enumerate遍历,既能拿到每个子列表的内容,又能获取它在原列表中的索引,找到匹配项后直接修改对应位置的元素,不需要删除子列表——这样既保留了原列表的结构,又完成了修改需求,后续再遍历这个列表时,就能看到你想要的样子啦。
内容的提问来源于stack exchange,提问作者Abhay
相关产品推荐
相关产品推荐

