You need to enable JavaScript to run this app. Python遍历二维列表按条件删除元素或行并导出异常分数的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

Python遍历二维列表按条件删除元素或行并导出异常分数的实现问题

问题根源拆解
  • 负分检测失效的核心原因:str.isdigit() 方法仅能识别无符号的数字字符,对带负号的字符串(如'-65')会直接返回False,根本不会进入后续的数值比对逻辑,所以所有负分异常都被漏检。
  • 仅能删除首个异常行的核心原因:遍历列表的过程中直接对原列表执行删除操作,会造成索引错位——删除当前位置的元素后,后续元素会自动前移补位,但遍历指针仍按原索引顺序推进,直接跳过相邻的待处理元素,必须反复运行才能逐次删完所有命中行。
  • 单元素删除方案报错的核心原因:newArray.remove(col) 的调用逻辑不匹配——col是嵌套在行内的分数值,而remove()方法仅能匹配列表顶层的元素,根本无法定位到嵌套的分数值,自然触发找不到元素的报错。

场景1:删除包含异常分数的整行

采用边遍历边收集合规行的逻辑,全程不修改原列表,从根源上避免索引错位问题;用int()直接做类型转换替代isdigit(),兼容带负号的数字字符串,不会漏检负分。

newArray = [['joe bloggs', '45', '46', '52', '83'],
 ['bobby uncle', '52', '45', '85', '63'],
 ['luke van', '69', '48', '45', '22'],
 ['lauren loo', '75', '24', '-65', '32'],
 ['heidi ho', '65', '7', '58', '14'],
 ['robyn cook', '23', '24', '51', '63'],
 ['cath roberts', '56', '85', '14', '74'],
 ['june jules', '58', '45', '26', '65'],
 ['dan nissie', '41', '56', '85', '45'],
 ['chris cooks', '24', '-15', '25', '75'],
 ['Kate Vander', '105', '23', '67', '1'],
 ['Luther rose', '55', '25', '207', '45']]

valid_rows = []
error_scores = []  # 收集所有命中的异常分数,用于写入txt

for row in newArray:
    row_is_valid = True
    # 跳过第一列的姓名,从第二列开始遍历分数
    for score_str in row[1:]:
        try:
            score = int(score_str)
            if score < 0 or score > 100:
                error_scores.append(score_str)
                row_is_valid = False
        # 遇到无法转成整数的内容直接跳过,不影响行判定
        except ValueError:
            continue
    if row_is_valid:
        valid_rows.append(row)

# 一次性写入异常分数到txt文件
with open("error_records.txt", "w", encoding="utf-8") as e:
    e.write(",".join(error_scores))

# 用处理完成的合规列表替换原数组
newArray = valid_rows

运行后得到的结果和预期的删行输出完全一致,不需要反复运行就能一次性删除所有含异常分的行,也能正常识别所有负分异常。

场景2:仅删除行内的单个异常分数

逐行过滤出符合范围的分数,保留行的整体结构和姓名信息,同时同步收集被删除的异常分数用于记录。

newArray = [['joe bloggs', '45', '46', '52', '83'],
 ['bobby uncle', '52', '45', '85', '63'],
 ['luke van', '69', '48', '45', '22'],
 ['lauren loo', '75', '24', '-65', '32'],
 ['heidi ho', '65', '7', '58', '14'],
 ['robyn cook', '23', '24', '51', '63'],
 ['cath roberts', '56', '85', '14', '74'],
 ['june jules', '58', '45', '26', '65'],
 ['dan nissie', '41', '56', '85', '45'],
 ['chris cooks', '24', '-15', '25', '75'],
 ['Kate Vander', '105', '23', '67', '1'],
 ['Luther rose', '55', '25', '207', '45']]

processed_array = []
error_scores = []

for row in newArray:
    name = row[0]
    valid_scores = []
    for score_str in row[1:]:
        try:
            score = int(score_str)
            if 0 <= score <= 100:
                valid_scores.append(score_str)
            else:
                error_scores.append(score_str)
        except ValueError:
            valid_scores.append(score_str)
    # 重新拼接成带姓名的行结构
    processed_array.append([name] + valid_scores)

# 写入异常分数到txt
with open("error_records.txt", "w", encoding="utf-8") as e:
    e.write(",".join(error_scores))

newArray = processed_array

运行后的结果和预期的单元素删除输出完全匹配。


内容的提问来源于stack exchange,提问作者EL.M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 22:54:00