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

如何在列表中关联11位ID与对应Material信息(优化判断逻辑)

问题:提取Material行对应的11位关联ID

原始数据列表

mylist = ['          12345678912        ST',
     '                         Halterung für Fortlüfterhaube',
     '                         Material/Werkstoff: Metall-Lackiert',
     '                         **Beginn Zeichnung**',
     '          98765432164        ST',
     '                         Klappe, komplett',
     '                         **Beginn Zeichnung**',
     '          74563254671        ST',
     '                         Sieb Außen-Dm 145 x 0,8mm',
     '                         Versatz Dm 122 x 5mm tief',
     '                         Material: Niro 1.4301 - Lochblech Dm1/LA1,5mm',
     '          90876487921        M',
     '                         Gista-Profil',
     '                         mit Moosgummihohlkammer-Dichtung (EPDM)',
     '                         Farbe: schwarz, Klemmbereich: 1-2 mm',
     '                         Material: EPDM, 60 +/- 5 Shore A,',
     '          64352647971       ST',
     '                         Winkelblech für Frost Erdungskontakt (AB 434 l)',
     '                         für TGr. 78.2',
     '                         Winkelblech für Frost Erdungskontakt (AB 434 l)',
     '                         für TGr. 78.2',
     '                         für TGr. 78.2',
     '                         Material/Werkstoff: X5CrNi 1810']

原始实现代码

Materials = []
iteration_list = mylist

for item in iteration_list:
    if str(item).strip().startswith("Material"):
        
        material_index = iteration_list.index(item)
        ID = "".join(re.findall(r'\d+', str(iteration_list[material_index - 1])))
        
        if len(ID) != 11:
            ID = "".join(re.findall(r'\d+', str(iteration_list[material_index - 2])))
            
            if len(ID) != 11:
                ID = "".join(re.findall(r'\d+', str(iteration_list[material_index - 3])))
                        
        Materials.extend([ID, item])

原始输出

['12345678912',
 '                         Material/Werkstoff: Metall-Lackiert',
 '74563254671',
 '                         Material: Niro 1.4301 - Lochblech Dm1/LA1,5mm',
 '90876487921',
 '                         Material: EPDM, 60 +/- 5 Shore A,',
 '64352647971',
 '                         Material/Werkstoff: X5CrNi 1810']

核心痛点

当前逻辑通过Material行向上遍历查找11位ID,需要多层if判断适配不同位置,代码冗余且不灵活,希望找到无需大量判断的方式直接定位Material行上方对应的11位ID。


解决方案:跟踪最近的11位ID

实现思路

遍历列表时,实时记录最近出现的11位ID,当遇到Material行时,直接使用这个最近记录的ID,无需向上回溯查找。这种方式不管Material行在ID下方的哪个位置,都能准确关联到对应的ID。

优化后代码

import re

Materials = []
current_id = None

for item in mylist:
    # 提取当前行的数字部分并判断是否为11位ID
    digits = re.findall(r'\d+', item.strip())
    if digits and len(digits[0]) == 11:
        current_id = digits[0]
    # 遇到Material行时,关联最近记录的ID
    elif item.strip().startswith("Material") and current_id is not None:
        # 可按需选择是否strip()清理多余空格
        Materials.extend([current_id, item.strip()])

print(Materials)

输出结果

['12345678912', 'Material/Werkstoff: Metall-Lackiert', '74563254671', 'Material: Niro 1.4301 - Lochblech Dm1/LA1,5mm', '90876487921', 'Material: EPDM, 60 +/- 5 Shore A,', '64352647971', 'Material/Werkstoff: X5CrNi 1810']

优势说明

  • 无需多层if判断,代码逻辑简洁清晰
  • 仅遍历一次列表即可完成关联,时间复杂度为O(n),效率更高
  • 适配任意位置的Material行,只要它在某个11位ID之后,就能准确关联

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:55:14