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

处理嵌套列表生成Pandas Series时函数返回长度异常求助

问题分析与解决

问题背景

给定如下嵌套列表数据:

data = [[['INS', 'Y', '18', '021', '28', 'A', '', '', 'AC'],
         ['REF', '0F', '816383217'],
         ['HD', '021', '', 'EPO', 'Copayment Level -1', 'IND']],
        [['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
         ['REF', '0F', '734419065']],
        [['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
         ['REF', '0F', '778954065']]]

需要遍历数据生成一个Pandas Series,每个元素对应外层子列表中的Copayment Level -X里的数字X,不存在则填None。但现有函数返回的列表长度比预期多1:

def copay_level():
    l = []
    for i in data:
        for lst in i:
            for x in lst:
                if x.startswith('Copayment Level'):
                    x = x.split('-')
                    l.append(x[1])
        else:
            l.append(None)
    return l

copayment_level = pd.Series(copay_level())
print(copayment_level)
# 输出:
# 0       1
# 1    None
# 2    None
# 3    None
# dtype: object

问题原因

问题出在内层for lst in i循环后的else分支:Python中,for循环的else分支会在循环正常结束(没有被break中断)时执行。第一个外层子列表中,找到匹配项后已经append('1'),但内层循环正常结束后,依然会执行else里的append(None),导致多添加了一个元素。

修正方案

给每个外层子列表设置一个标记,判断是否找到目标值,循环结束后根据标记添加对应内容:

import pandas as pd

data = [[['INS', 'Y', '18', '021', '28', 'A', '', '', 'AC'],
         ['REF', '0F', '816383217'],
         ['HD', '021', '', 'EPO', 'Copayment Level -1', 'IND']],
        [['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
         ['REF', '0F', '734419065']],
        [['INS', 'Y', '18', '024', '07', 'A', '', '', 'TE'],
         ['REF', '0F', '778954065']]]

def copay_level():
    l = []
    for i in data:
        found = False
        for lst in i:
            for x in lst:
                if x.startswith('Copayment Level'):
                    num = x.split('-')[1]
                    l.append(num)
                    found = True
                    break  # 找到后跳出内层循环,避免重复处理
            if found:
                break  # 跳出中层循环
        if not found:
            l.append(None)
    return l

copayment_level = pd.Series(copay_level())
print(copayment_level)
# 输出:
# 0       1
# 1    None
# 2    None
# dtype: object

说明

  • 新增found标记,每个外层循环开始时初始化为False
  • 找到目标值后,设置found=True并跳出内层循环,避免不必要的遍历
  • 外层循环结束后,根据found的值决定添加数字还是None,确保每个外层子列表只对应一个结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:33:28