Python如何删除文本文件中重复的逆序数字行
实现思路
- 核心逻辑是为每对数字生成唯一的无向标识:将每行的两个数字排序后组成不可变的元组,互为逆序的数字对会生成完全相同的元组
- 用集合存储已经出现过的标识,利用集合O(1)的查询效率快速判断当前行是否为逆序重复行
- 遍历所有行,仅保留标识未在集合中出现过的行,同时将新标识存入集合
可直接运行的代码实现
def remove_reverse_duplicates(input_path, output_path): seen = set() with open(input_path, 'r', encoding='utf-8') as in_f, open(output_path, 'w', encoding='utf-8') as out_f: for line in in_f: # 跳过空行 line_stripped = line.strip() if not line_stripped: continue # 分割得到两个数字,默认split支持匹配任意空白字符(单个/多个空格、制表符都兼容) a, b = map(int, line_stripped.split()) # 生成无向唯一标识 key = tuple(sorted((a, b))) if key not in seen: seen.add(key) # 保留原行格式写入 out_f.write(line) # 调用时替换为你本地的实际文件路径即可 remove_reverse_duplicates('input.txt', 'output.txt')
补充说明
- 该方案时间复杂度为O(n),n为文件行数,针对数千行的场景运行效率极高,完全没有性能压力
- 默认保留所有逆序对中第一次出现的行,如果需要保留最后一次出现的行,可先遍历所有行存下所有key对应的最后一行内容,再统一写入即可
- 如果你的文件分隔符是固定的特殊字符,只需要修改
split()的入参即可,比如分隔符是逗号就改为split(',')
内容的提问来源于stack exchange,提问作者kiter23
相关产品推荐
相关产品推荐

