如何实现获取两个列表重复元素的功能?附代码示例
获取两个列表的重复元素实现方案
基础高效实现(无顺序要求)
利用集合的交集特性,能快速得到两个列表的共同元素,代码简洁且效率高:
def getDuplicates(list1, list2): return list(set(list1) & set(list2))
测试你的示例:
list1 = [1,2,3,4,5] list2 = [1,2,8,4,6] duplicates = getDuplicates(list1, list2) print(duplicates) # 输出类似 [1,2,4](集合本身无序,顺序可能略有差异)
保持原列表顺序的实现
如果需要保留元素在list1中的出现顺序,或者要保留list1中重复出现的元素(只要list2包含该元素),可以用列表推导式结合集合优化查找效率:
def getDuplicates(list1, list2): # 把list2转成集合,将查找复杂度从O(n)降到O(1) set2 = set(list2) return [item for item in list1 if item in set2]
比如当list1 = [2,1,1,3,4],list2 = [1,2,4]时,这个方法会返回[2,1,1,4],既保留原顺序又保留重复项。
方法说明
- 集合交集法:时间复杂度O(n+m),适合不关心元素顺序和重复次数的场景,代码最简洁。
- 列表推导式法:同样是O(n+m)时间复杂度,兼顾顺序和重复元素的保留,实用性更强。
内容的提问来源于stack exchange,提问作者diacidos
相关产品推荐
相关产品推荐

