Python如何使用for循环替换列表中的多个字符串?
列表元素替换实现方案
原有代码问题
- 判断逻辑错误:a中存储的是带
_1后缀的新值,这些值本身不存在于列表b中,if i in b判断永远为False,替换逻辑不会执行 - 语法错误:Python原生列表没有
.str属性,.str是pandas专属的字符串处理接口,直接调用会报错 - 操作对象错误:需求是修改列表b,原有代码尝试修改列表a,完全不符合需求
正确实现方法
核心思路是先构建新旧值的映射关系,再遍历列表b完成替换,代码如下:
# 构建替换映射表:key为b中待替换的旧值,value为a中对应的新值 replace_map = {v.removesuffix('_1'): v for v in a} # 遍历生成新的b列表,匹配到映射关系则替换,否则保留原值 b = [replace_map.get(item, item) for item in b]
如果使用的Python版本低于3.9(无removesuffix方法),可替换为如下写法:
replace_map = {v.rsplit('_', 1)[0]: v for v in a} b = [replace_map.get(item, item) for item in b]
执行后得到的b列表结果为:['ba', 'bb', 'bc_1', 'bd_1', 'be_1', 'bf_1', 'bg_1', 'bh', 'bi']
内容的提问来源于stack exchange,提问作者Gerald Vasquez Aleman
相关产品推荐
相关产品推荐

