如何将普通字符列表替换为自定义字符列表实现文本字母映射转换?
字符替换功能实现方案
原代码问题梳理
str.replace()方法仅返回替换后的新字符串,不会修改原字符变量,当前代码未接收返回值,替换结果直接丢失- 直接传入modified列表作为替换参数逻辑错误,需要先通过原字符在normal列表的索引,匹配对应的自定义替换字符
- 未拼接所有替换后的字符,无法生成最终转换结果输出
修复后可运行代码
normal = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] modified = ['s', 'n', 'v', 'f', 'r', 'g', 'h', 'j', 'o', 'k', 'l', 'a', 'z', 'm', 'p', 'q', 'w', 't', 'd', 'y', 'i', 'b', 'e', 'c', 'u', 'x'] # 预先构建映射字典,查询效率更高 char_map = dict(zip(normal, modified)) word = input() result = [] for char in word: # 匹配到小写字母就替换,其他字符(空格、大写、符号等)原样保留 if char in char_map: result.append(char_map[char]) else: result.append(char) # 拼接列表为字符串输出 print(''.join(result))
核心调整说明
- 用
zip()把normal和modified列表打包成键值对字典,后续查询替换字符的效率比每次查列表索引更高 - 用空列表存储每一步处理后的字符,最后用
join()方法拼接成完整字符串输出 - 未匹配到的字符会原样保留,支持输入带空格、标点、大写字母的完整句子
如果需要支持大写字母替换,只需要在判断前增加大小写兼容处理即可,示例:
for char in word: lower_char = char.lower() if lower_char in char_map: replaced = char_map[lower_char] # 原字符是大写的话,替换结果也转大写 result.append(replaced.upper() if char.isupper() else replaced) else: result.append(char)
内容的提问来源于stack exchange,提问作者Lee Zhi Han Nicholas
相关产品推荐
相关产品推荐

