Python列表重复值提取函数仅返回首个重复值的问题求助
问题根源
你的函数在找到第一个重复元素后,立刻执行了return True,直接终止了函数运行,导致后续的重复元素(比如示例中的john)根本没机会被检测和输出。另外原逻辑还会重复输出同一个重复元素(比如列表里的两个sam都会被打印一次)。
修复后的代码
下面是修复后的版本,解决了提前终止和重复输出的问题:
def DuplicateGuideCheck(in_list, report): seen_duplicates = set() # 记录已经输出过的重复元素,避免重复打印 has_duplicate = False for each in in_list: count = in_list.count(each) if count > 1 and each not in seen_duplicates: print(each) report.write(each) report.write('\n') seen_duplicates.add(each) has_duplicate = True if not has_duplicate: print("NONE") report.write('NONE\n') return has_duplicate
性能优化版本
原代码每次调用in_list.count(each)都会遍历整个列表,时间复杂度为O(n²),如果列表元素较多,效率会很低。下面是用字典统计次数的优化版本,时间复杂度降为O(n):
def DuplicateGuideCheck(in_list, report): count_map = {} # 先统计所有元素的出现次数 for item in in_list: count_map[item] = count_map.get(item, 0) + 1 has_duplicate = False # 遍历统计结果,输出重复元素 for item, count in count_map.items(): if count > 1: print(item) report.write(item) report.write('\n') has_duplicate = True if not has_duplicate: print("NONE") report.write('NONE\n') return has_duplicate
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

