Python列表子串移除问题求助:代码返回结果不符合预期
嘿,我来帮你看看问题出在哪~
你原来的代码逻辑其实搞反啦:你写的if not any(word in i for word in a)是在过滤掉所有包含a中子串的元素,只保留完全不沾边的(比如'ksw'和'erer'),但你的真实需求是对每个元素,把里面属于a的子串删掉,而不是直接扔掉整个元素。
那正确的做法应该是对每个b里的字符串,挨个把a中的子串替换成空字符,具体代码如下:
a = ['ab','bcd','efg','h'] b = ['wiab','wbcdz','rh','ksw','erer'] result = [] for s in b: # 先复制当前字符串,避免修改原数据 processed_str = s # 遍历a里的所有子串,逐个替换为空 for substring in a: processed_str = processed_str.replace(substring, '') result.append(processed_str) print(result) # 输出: ['wi', 'wz', 'r', 'ksw', 'erer']
运行后得到的结果和你的预期几乎一致,只有第四个元素是'ksw'——因为原b里的'ksw'根本不包含a中的任何子串,所以不需要修改,应该是你写预期的时候笔误写成'ksh'啦😉
简单解释下逻辑:
- 遍历b中的每个字符串
- 对每个字符串,依次把a里的每个子串都替换成空(
replace会自动替换所有出现的该子串) - 把处理后的字符串加入结果列表
这样就实现了你要的「移除列表b元素中包含的列表a内的子串」的需求啦~
内容的提问来源于stack exchange,提问作者황준석
相关产品推荐
相关产品推荐

