Python字符串与列表元素替换相关异常代码问题咨询
Python字符串与列表替换问题解答
问题1:字符串替换无效果的原因
Python的字符串是不可变类型,str.replace()方法不会修改原字符串,只会返回替换完成后的新字符串。你写的代码里只调用了string.replace(letter, "*"),没有把返回值重新赋值给string变量,所以原字符串不会有任何变化。
另外不建议用list作为参数名,这是Python内置的列表类型关键字,会覆盖原有功能,容易引发其他未知错误。
修正后的代码示例:
def find_a_common(word_list, string): for word in word_list: for letter in word: if letter in string: # 把替换后的新字符串重新赋值给string string = string.replace(letter, "*") return string print(find_a_common(["ala"], "Kasia")) # 输出结果:K*si*
问题2:列表推导式报错的原因
你写的列表推导式语法错误,参考示例的语法结构是[符合条件的返回值 if 条件 else 不符合的返回值 for 变量 in 遍历对象],你把if...else条件判断的位置放错了,放到了遍历逻辑的中间,不符合语法规则。
同时你在循环内部重复给list变量赋值,和参数名重名,还重复遍历list,逻辑完全混乱,且你的需求是返回替换后的字符串,代码里却返回列表,和预期输出不符。
如果要用列表推导式实现需求,可以参考如下写法:
def find_a_common(word_list, string): # 先把所有要替换的字符去重汇总 target_chars = set() for word in word_list: target_chars.update(word) # 用列表推导式生成替换后的字符列表,再拼接成字符串 return ''.join(["*" if c in target_chars else c for c in string]) print(find_a_common(["ala"], "Kasia")) # 输出结果:K*si*
问题3:三重循环实现方案
这个需求本身不需要三重循环,两层循环就可以实现,但如果要写三重循环的实现是可行的,你写的原有代码存在多个问题:
- 重复定义
letter变量,外层和最内层循环都用letter做变量名,会导致变量覆盖 - 逻辑判断错误,
if letter in list的判断完全不符合需求 - 还是存在
replace方法没有赋值的问题 - 用
list做参数名的问题
正确的三重循环写法示例:
def find_a_common(word_list, string): # 先把字符串转成列表,方便修改 str_list = list(string) # 第一层循环:遍历传入的单词列表里的每个单词 for word in word_list: # 第二层循环:遍历每个单词里的每个要替换的目标字符 for target_char in word: # 第三层循环:遍历原字符串的每个字符位置,匹配替换 for idx, char in enumerate(str_list): if char == target_char: str_list[idx] = "*" # 把列表转回字符串返回 return ''.join(str_list) print(find_a_common(["ala"], "Kasia")) # 输出结果:K*si*
内容的提问来源于stack exchange,提问作者Learningmachine
相关产品推荐
相关产品推荐

