【问题标题】:Find duplicate in list using built-in functions only [duplicate]仅使用内置函数在列表中查找重复项 [重复]
【发布时间】:2018-11-14 18:33:34
【问题描述】:

我是个菜鸟,所以请温柔一点!

我已经写了这段代码:

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 函数,我如何让相同的函数执行相同的任务?

【问题讨论】:

  • 对于列表中的每个项目,检查该项目是否出现在列表其余部分的其他位置。如果是这样,那就是重复的。
  • 您可以使用numbers.count(num) 作为一个不错的选择
  • 我识别的副本 also 忽略/删除 0 和 None 值;你不需要那个功能。剩下的解决方案相当于你得到的一个答案。

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


【解决方案1】:

在您迭代时收集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 一样多,而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) 包含检查,所以是二次的。

【讨论】:

    猜你喜欢
    • 2013-02-21
    • 2019-01-15
    • 1970-01-01
    • 2018-04-08
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多