如何通过python检查列表超过9000个元素的时间较少的重复项

co2*_*f2e 0 python algorithm

嗯试图通过python检查整数列表中是否存在重复值.这是成功的,我发现当列表的大小增加时执行时间越来越长.我怎样才能改善以下逻辑的运行时间?

def containsDuplicate( nums):
    if len(nums) < 2:
        return False
    cnt = 0
    flag = False
    length = len(nums)
    while cnt < length:
        p = cnt + 1
        while p < length:
            if nums[cnt] == nums[p]:
                flag = True
                break
            p += 1
        cnt += 1
    return flag
Run Code Online (Sandbox Code Playgroud)

Vin*_*ent 11

你可以使用一套:

>>> lst = [1, 2, 3]
>>> len(set(lst)) != len(lst)
False
>>> lst = [1, 2, 2]
>>> len(set(lst)) != len(lst)
True
Run Code Online (Sandbox Code Playgroud)

编辑:更快的版本,如评论中所指出的:

>>> lst = [3] + list(range(10**4))
>>> seen = set()
>>> any(x in seen or seen.add(x) for x in lst)
True
>>> seen
set([0, 1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,这有其优点,但在序列的总长度上是线性的,而在长度上可以是第一个重复项目的线性. (3认同)
  • 正是我会做的.我还要添加一个解释,因为哈希集中的项是唯一的,并且每个插入成本为O(1),此解决方案不仅提供所需的结果,而且还有效地执行 (2认同)