仅使用内置功能在列表中查找重复项

时间:2018-11-14 18:33:34

标签: python python-3.x for-loop

我是TOTAL Noob,所以请保持温柔!

我已经编写了这段代码:

def sorted_has_duplicate(numbers):
     numbers.sort()
     duplicate = False

     for num in range(len(numbers)-1):
         if numbers[num] == numbers[num + 1]:
             duplicate = True
             break
     return duplicate

代码运行正常,它应该执行的操作是找到列表中的第一个重复值(如果有)并返回True or False

我的问题是,如果列表未排序(不允许排序)并且我只能使用内置的python函数,我如何让相同的函数执行相同的任务?

1 个答案:

答案 0 :(得分:2)

迭代时在set中收集数字:

def has_duplicate(numbers):
     seen = set()
     for num in numbers:
         if num in seen:
             return True
         seen.add(num)
     return False

您也可以将其缩短为:

def has_duplicate(numbers):
     return len(numbers) != len(set(numbers))

这只是检查list是否具有与其set一样多的元素,根据定义,这些元素没有重复项。

请注意,这两个基于集合的解决方案都是线性运行的,因为集合的O(1)包含检查。在列表剩余部分中搜索每个元素的幼稚蛮力方法

def has_duplicate(numbers):
     for i, num in enumerate(numbers):
         if num in numbers[i+1:]:
             return True
     return False

由于列表的O(N)包含检查而为二次方。