Python 如何基于替换词列表高效随机替换嵌套字符串列表中的目标词
嵌套字符串列表的目标词批量随机替换实现
现有代码存在的问题
- 原始
original_list的第一个子列表元素间缺少分隔逗号,相邻无逗号的字符串会被Python自动拼接为单个长字符串,导致列表结构直接不符合预期 - 替换逻辑硬编码了仅匹配
'Bananas'单个目标词,未覆盖预设的全部替换目标 - 原循环流程为先打乱备选词列表,再逐个将备选词套入全量文本做遍历替换,既没有实现“随机抽取替换”的核心需求,还存在多层无效嵌套循环的效率问题
可直接运行的实现代码
import random # 修正格式后的原始嵌套列表 original_list = [ ['Bananas', 'are', 'boring', 'and', 'too', 'sweet'], ['Why', 'can', 'we', 'get', 'apples', 'but', 'no', 'blueberries'], ['this', 'is', 'not', 'good', 'for', 'eat', 'some', 'grapes'], ['have', 'you', 'ever', 'tried', 'to', 'buy', 'all', 'the', 'different', 'apples'] ] # 匹配的目标词集合(补充了实际语料中出现的复数形式,避免漏匹配) target_words = {'Bananas', 'apples', 'grape', 'grapes'} replacement_words = ['popcorn', 'juice', 'chocolate', 'chips', 'cake', 'sweets'] # 遍历嵌套列表完成批量替换 replaced_result = [] for sub_list in original_list: processed_row = [] for word in sub_list: if word in target_words: # 命中目标词时从备选列表随机抽取一个值替换 processed_row.append(random.choice(replacement_words)) else: processed_row.append(word) replaced_result.append(processed_row) # 验证输出结果 for row in replaced_result: print(row)
可灵活调整的规则说明
- 如果需要让同一个目标词在全列表的所有出现位置都替换成同一个固定随机值,不需要每次出现都重新随机抽取,可以提前构建替换映射字典:
后续遍历列表时直接通过# 提前为每个目标词绑定固定的替换值 word_replace_map = { "Bananas": random.choice(replacement_words), "apples": random.choice(replacement_words), "grapes": random.choice(replacement_words) }processed_row.append(word_replace_map.get(word, word))完成替换即可 - 如果需要兼容大小写、单复数等灵活匹配规则,可以在判断匹配前,先把语料单词和目标词做归一化处理(比如统一转小写、统一去除复数后缀
s)再做比对,避免漏匹配
内容的提问来源于stack exchange,提问作者msa
相关产品推荐
相关产品推荐

