如何逐行对比文件内列表与代码中列表并统计匹配次数
解决方案
直接上可运行的代码,完美适配你的需求:
# 定义要匹配的目标数字集合(用集合比列表查找更快) target_nums = {1, 5, 10, 20, 30} # 打开目标文件,逐行处理 with open("your_file.txt", "r") as f: # enumerate从1开始计数,直接拿到行号 for line_idx, line_content in enumerate(f, start=1): # 清理行内所有空格,按逗号分割成元素,转成整数列表 # 同时过滤掉分割后可能出现的空字符串(比如行尾逗号或者格式混乱的情况) current_line_nums = [] for item in line_content.replace(" ", "").split(","): if item: current_line_nums.append(int(item)) # 统计当前行和目标集合的匹配数量 match_count = sum(num in target_nums for num in current_line_nums) # 按要求格式输出 print(f"Line {line_idx} = {match_count}")
为什么你的原代码只处理第一行?
你之前的代码只计算了单个变量a的匹配数,没有循环遍历文件的每一行。上面的代码通过for line_idx, line_content in enumerate(f, start=1)实现了逐行处理,同时用enumerate直接获取从1开始的行号,刚好符合输出要求。
额外优化点
- 用集合存储目标数字:集合的成员检测效率远高于列表,当数据量大时差异会很明显。
- 文本清洗逻辑:处理了示例文件里的格式混乱(比如
30 ,40 50这种带空格的逗号分割),确保所有元素都能正确转成整数。 - 空元素过滤:避免因为行尾逗号或者格式问题导致的
ValueError(转整数失败)。
运行结果
用你提供的示例文件测试,输出完全符合期望:
Line 1 = 3 Line 2 = 3 Line 3 = 0
内容的提问来源于stack exchange,提问作者RodrighoMR
相关产品推荐
相关产品推荐

