Python列表替换元素时如何让带空格字符串保留为单个列表项
问题根因
你现有代码的问题出在最后一步使用split()拆分字符串,该方法默认会按所有空白字符切割,导致包含空格的new_becmg被拆成两个独立元素。「转全量字符串替换再拆分」的逻辑本身就不适合处理元素内部带空格的列表场景。
最优解决方案
直接遍历列表匹配替换对应项即可,不会改动元素内部的空格,也不会出现拆分错误:
import re cont = "BECMG 2622/2700 32010KT CAVOK" actual = "BECMG 2622" sorted_fm_becmg = ['BECMG 262200', '272100'] line_to_print = 'BECMG 262200' becmg = re.search(r'%s[/]\d\d\d\d' % re.escape(actual), cont).group() # 注意Python注释符为#,不是// new_becmg = "BECMG " + becmg[-4:] + "00" # 直接遍历列表替换 sorted_fm_becmg = [new_becmg if item == line_to_print else item for item in sorted_fm_becmg] print(sorted_fm_becmg) # 输出:['BECMG 270000', '272100']
可选方案(特殊分隔符实现字符串替换逻辑)
如果确实需要用字符串替换的处理逻辑,可以选择不会出现在业务内容中的特殊字符作为分隔符,避免误拆分:
# 用|作为分隔符,确保你的业务内容中不会出现该字符 join_str = '|' sorted_fm_becmg = (join_str.join(sorted_fm_becmg).replace(line_to_print, new_becmg)).split(join_str)
运行后输出结果和上述方案完全一致。
内容的提问来源于stack exchange,提问作者PW1990
相关产品推荐
相关产品推荐

