如何修改Python脚本遍历单词列表生成Leet Code变体?
批量生成单词的Leet变体脚本修改方案
以下是修改后的完整代码,支持批量处理单词列表,同时优化了原脚本的效率和可读性:
import itertools import csv def create_leet_map(): # 将原匹配列表转换为字典,提升字符查找效率 leet_matches = [ ['a','@','4','∆','Д','а','а','a','à'], ['b','8','b','ḃ','ḅ','ḇ'], ['c','<','{','[','(','©'], ['d','d','ď','ḋ','ḍ','ḏ','ḑ','ḓ'], ['e','3','£','₤','€','е'], ['f','7','ƒ','ḟ'], ['g','9','[','-','6','ĝ','ğ','ġ','ģ','ǧ','ǵ','ḡ'], ['h','4','#','ĥ','ȟ','ḣ','ḥ','ḧ','ḩ','ḫ','ẖ'], ['i','1','|','!','ì','í'], ['j','√','ĵ','ǰ'], ['k','ķ','ǩ','ḱ','ḳ','ḵ','ķ','ǩ','ḱ','ḳ','ḵ'], ['l','1','|','ĺ','ļ','ľ','ḷ','ḹ','ḻ','ḽ'], ['m','м','ḿ','ṁ','ṃ'], ['n','И','и','п','ñ','ń','ņ','ň','ǹ','ṅ','ṇ','ṉ','ṋ'], ['o','0','Ø','Θ','о','ө','ò','ó','ô','õ','ö','ō','ŏ','ő','ơ','ǒ','ǫ','ǭ'], ['p','р','ṕ','ṗ'], ['q','9','(',')','0'], ['r','Я','®','ŕ','ŗ','ř','ȑ','ȓ','ṙ','ṛ','ṝ','ṟ'], ['s','5','$','§','ś','ŝ','ş','š','ș','ṡ','ṣ','ṥ','ṧ','ṩ'], ['t','7','+','т','ţ','ť','ț','ṫ','ṭ','ṯ','ṱ','ẗ'], ['u','ù','ú','û','ü','ũ','ū','ŭ','ů','ű','ų','ư','ǔ','ǖ','ǘ'], ['v'], ['w','Ш','ŵ','ẁ','ẃ','ẅ','ẇ','ẉ','ẘ'], ['x','×','%','*','Ж','ẋ','ẍ'], ['y','¥','Ч','ү','у','ṽ'], ['z','5','ź','ż','ž','ẑ'] ] return {match[0]: match for match in leet_matches} def generate_leet_variants(word, leet_map): # 生成单个单词的所有Leet变体 char_options = [] for letter in word.lower(): # 统一转小写,兼容大写输入 char_options.append(leet_map.get(letter, [letter])) return [''.join(variant) for variant in itertools.product(*char_options)] def batch_generate_leet_variants(word_list): leet_map = create_leet_map() result = {} for word in word_list: variants = generate_leet_variants(word, leet_map) result[word] = variants print(f"已生成单词「{word}」的{len(variants)}个Leet变体") return result def save_variants_to_csv(variant_dict, filename='leet_variants.csv'): # 将批量结果写入CSV,每行对应一个变体+原单词 with open(filename, mode='w', newline='', encoding='utf-8') as csvfile: fieldnames = ['原单词', 'Leet变体'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for word, variants in variant_dict.items(): for variant in variants: writer.writerow({'原单词': word, 'Leet变体': variant}) # 示例使用 if __name__ == "__main__": # 替换为你需要处理的单词列表 target_words = ["hola", "leet", "python"] all_variants = batch_generate_leet_variants(target_words) save_variants_to_csv(all_variants)
关键改动说明
- 效率优化:把原有的二维匹配列表转为字典,避免每次嵌套循环查找字符,处理大列表时速度提升明显
- 批量支持:新增
batch_generate_leet_variants函数,直接接收单词列表,返回每个单词对应的变体集合 - 兼容大小写:自动将输入单词转为小写,确保大写字符也能匹配到对应变体
- 鲁棒性提升:遇到不在映射表中的字符时,直接保留原字符,避免报错
- CSV格式优化:每个变体单独占一行,同时保留原单词标识,方便后续查看对应关系,使用UTF-8编码避免特殊字符乱码
- 冗余代码移除:删除原脚本中重复输出的无效逻辑,简化代码结构
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

