You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从字符串批量提取多值异常:[-2]索引值被[1]重复覆盖问题排查

问题解决:提取列表指定位置元素时的覆盖问题

问题背景

需要从字典中每个元素的列表里提取[0]、[1]、[-2]位置的值,但运行代码后[-2]的值被[1]的值重复覆盖。

输入数据

corrected Dataframes: ('Peak'{'Al': ['90.569', '533.3', '32.6', '28.8', '1.02', '115', '9.588'], 'Ca': ['107.254', '5759.7', '57.5', '53.0', '0.30', '83', '102.945'], 'Cr': ['73.359', '-0.2', '89.8', '76.0', '100.00', '', '100', '0.000'], 'Fe': ['134.750', '581.0', '20.3', '16.8', '0.96', '164', '7.775'], 'K': ['119.624', '-4.7', '37.4', '30.0', '100.00', '', '91', '0.000'], 'Mg': ['107.507', '5699.9', '40.7', '33.5', '0.30', '51', '31.063'], 'Mn': ['146.274', '20.3', '12.3', '13.5', '7.49', '143', '0.256'], 'Na': ['129.500', '64.2', '17.6', '12.0', '4.77', '71', '2.252'], 'Si': ['77.272', '7183.2', '92.6', '56.8', '0.27', '196', '75.399'], 'Ti': ['88.115', '199.2', '44.4', '39.0', '1.89', '89', '0.870']})

现有代码

if 'Peak' in element_data:
    for key in element_data['Peak'].keys():
        element_data['Peak'][key] = [element_data['Peak'][key][0], element_data['Peak'][key][1], element_data['Peak'][key][-2]]

当前错误输出

'Peak' data Al: ['90.569', '533.3', '533.3']
'Peak' data Ca: ['107.254', '5759.7', '5759.7']
'Peak' data Cr: ['73.359', '-0.2', '-0.2']
'Peak' data Fe: ['134.750', '581.0', '581.0']
'Peak' data K: ['119.624', '-4.7', '-4.7']
'Peak' data Mg: ['107.507', '5699.9', '5699.9']
'Peak' data Mn: ['146.274', '20.3', '20.3']
'Peak' data Na: ['129.500', '64.2', '64.2']
'Peak' data Si: ['77.272', '7183.2', '7183.2']
'Peak' data Ti: ['88.115', '199.2', '199.2']

期望输出

'Peak' data Al: ['90.569', '533.3', '115']
'Peak' data Ca: ['107.254', '5759.7', '83']
'Peak' data Cr: ['73.359', '-0.2', '100']
'Peak' data Fe: ['134.750', '581.0', '164']
'Peak' data K: ['119.624', '-4.7', '91']
'Peak' data Mg: ['107.507', '5699.9', '51']
'Peak' data Mn: ['146.274', '20.3', '143']
'Peak' data Na: ['129.500', '64.2', '71']
'Peak' data Si: ['77.272', '7183.2', '196']
'Peak' data Ti: ['88.115', '199.2', '89']

问题原因及修复方案

问题原因

循环中直接修改element_data['Peak'][key]时,原列表会被替换成新的长度为3的列表。当访问element_data['Peak'][key][-2]时,实际访问的是已经修改后的新列表的索引1位置,所以出现值重复的情况。

修复代码

先将原列表保存到临时变量,再基于临时变量构建新列表,避免修改原列表时的索引偏移:

if 'Peak' in element_data:
    for key in element_data['Peak'].keys():
        original_list = element_data['Peak'][key]
        element_data['Peak'][key] = [original_list[0], original_list[1], original_list[-2]]

内容的提问来源于stack exchange,提问作者Moglar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:47:34