Python列表操作:如何将修改后的元素替换回原列表?
解决方案
方法一:遍历原列表逐个替换
如果已经有处理好的v列表,只需遍历原列表inp,定位所有以"A"开头的元素位置,按顺序将v中的元素替换进去:
inp = ["A123.45678", "B98.76", "A76.56781", "C100"] v = ["A123.456", "A76.567"] # 你已处理完成的结果列表 v_idx = 0 for i in range(len(inp)): if inp[i].startswith("A"): inp[i] = v[v_idx] v_idx += 1
方法二:先收集索引再批量替换
先找出原列表中所有符合条件的元素索引,再通过zip将索引与v中的元素一一对应完成替换:
inp = ["A123.45678", "B98.76", "A76.56781", "C100"] v = ["A123.456", "A76.567"] # 获取所有以"A"开头的元素的索引 target_indices = [i for i, item in enumerate(inp) if item.startswith("A")] # 批量替换对应位置的元素 for idx, modified_item in zip(target_indices, v): inp[idx] = modified_item
更简洁的方式:合并处理与替换
其实无需单独生成v列表,直接在遍历原列表时完成数值处理和替换,一步到位:
import re inp = ["A123.45678", "B98.76", "A76.56781", "C100"] def process_a_element(item): if item.startswith("A"): # 正则匹配小数点后3位及后续数字,仅保留前3位小数 return re.sub(r"(\d+\.\d{3})\d+", r"\1", item) return item # 生成新的处理后列表(不修改原列表) modified_inp = [process_a_element(item) for item in inp] # 或者直接修改原列表 for i in range(len(inp)): inp[i] = process_a_element(inp[i])
注:正则表达式r"(\d+\.\d{3})\d+"适配小数位数多于3位的情况,如果你的场景里都是固定小数点后5位,也可以用r"(\d+\.\d{3})\d{2}"精准匹配。
内容的提问来源于stack exchange,提问作者NadeY
相关产品推荐
相关产品推荐

