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

如何快速校验列表值是否匹配十万行级文件第4列并输出指定结果

性能问题原因分析
  • 时间复杂度过高:原代码使用my_number in row3_list判断,列表的in操作是O(n)线性复杂度,累计遍历次数达到10万*10万=10^10次量级,是速度极慢的核心原因
  • 循环逻辑冗余:每读取一行就完整遍历一次my_list,额外增加了不必要的循环开销
  • 业务逻辑错误:原代码会在遍历过程中重复添加大量无效的unknown记录,完全不符合需求要求,也额外消耗了内存和计算资源
优化实现方案

优化思路是仅遍历文件1次,配合O(1)复杂度的集合匹配完成需求,总时间复杂度为O(N)(N为文件行数),10万条记录几秒内即可完成处理。

import csv

my_file = "你的tsv文件路径"
my_list = ['140', '700', '800']

# 待匹配列表转集合,in判断为O(1)复杂度
my_set = set(my_list)
new_list = []
# 记录已命中的待匹配值
matched_values = set()

with open(my_file, 'r', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter='\t')
    for row in reader:
        # 跳过不规范行避免索引报错
        if not row or len(row) < 4:
            continue
        col4 = row[3]
        if col4 in my_set:
            new_list.append(row)
            matched_values.add(col4)

# 补全未匹配到的unknown记录
for val in my_list:
    if val not in matched_values:
        new_list.append(['unknown', 'unknown', 'unknown', val])

如果需要输出为制表符分隔的文件,可追加以下代码:

with open("输出文件路径.tsv", 'w', encoding='utf-8', newline='') as f:
    writer = csv.writer(f, delimiter='\t')
    writer.writerows(new_list)

运行后输出结果和你给出的期望示例完全一致。


内容的提问来源于stack exchange,提问作者Al-Andalus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:04