Python:如何利用列表实现字符串字符的对应替换?
解决字符映射替换的重复问题
你的核心问题是循环替换会导致已替换的字符被二次匹配,而直接链式调用replace又太繁琐。最简洁高效的解决方式是先建立字符映射字典,再逐个字符完成替换,这样每个字符只会被处理一次,完全避免重复替换的问题。
实现代码
characters = ["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", ".", ",", " ", "!", "?"] characters2 = ['h', 'i', '.', 'u', 'o', 'x', 'q', 'b', 'y', 'z', 's', 'd', 'm', 'w', 'k', 'n', 'j', '?', 'a', 'v', 't', 'r', 'e', 'f', 'c', ' ', '!', 'l', 'g', 'p', ','] # 建立字符映射字典 char_map = dict(zip(characters, characters2)) # 待加密字符串 input_str = "string" # 逐个字符替换并拼接成结果 encrypted_str = ''.join([char_map[char] for char in input_str]) print(encrypted_str) # 输出: av?ywq
原理说明
- 用
zip把两个一一对应的列表打包成键值对,再转成字典char_map,这样每个原字符都能直接查到对应的加密字符,查询效率是O(1)。 - 遍历输入字符串的每个字符,通过字典直接获取替换后的字符,最后用
join拼接成完整字符串。整个过程每个字符只处理一次,不会出现替换后字符被再次匹配的问题。
如果需要处理不在映射列表里的字符,可以给字典查询加个默认值,比如char_map.get(char, char),这样未知字符会保留原样。
内容的提问来源于stack exchange,提问作者user20539599
相关产品推荐
相关产品推荐

