Python如何检测句子列表中的重复语句?现有代码无法识别重复内容求助
代码失效核心原因
- 错误构造了嵌套列表:
f.readlines()本身已经返回了每行内容为元素的一维列表,你额外执行了list1 = [data],相当于把整个行列表包装成了新列表的唯一元素,此时list1是仅包含1个元素的二维嵌套列表,遍历时永远不会找到重复项,自然输出空列表。 - 原方案时间复杂度为O(n²),数据量较大时运行效率极低,且没有处理每行末尾可能残留的
\n换行符,若部分行末尾换行符存在差异也会导致匹配失败。 - 原代码未显式关闭打开的文件句柄,存在资源泄漏风险。
无enumerate的最优实现方案
使用collections.Counter做频次统计,时间复杂度仅为O(n),代码简洁且运行效率更高:
from collections import Counter path = input() # 用with语法自动管理文件句柄,避免资源泄漏 with open(path, 'r', encoding='utf-8') as f: # 若需要严格匹配行尾换行则直接用f.readlines(),若要忽略首尾空白/换行可替换为line.strip() lines = [line.rstrip('\n') for line in f] # 统计每行出现次数 line_count = Counter(lines) # 筛选所有出现次数≥2的重复行 duplicate_lines = [line for line, cnt in line_count.items() if cnt >= 2] print(duplicate_lines) # 若需要同时输出每个内容的重复次数,可直接执行print(line_count.most_common())
内容的提问来源于stack exchange,提问作者Pony
相关产品推荐
相关产品推荐

