Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找列表是否包含重复项的最有效方法_Python_Python 3.x_Set - Fatal编程技术网

Python 查找列表是否包含重复项的最有效方法

Python 查找列表是否包含重复项的最有效方法,python,python-3.x,set,Python,Python 3.x,Set,我有一个大整数的列表,作为输入。 我想写一个函数来检查列表中的项目是否都是不同的 方法1:使用集合对列表进行迭代,并跟踪到目前为止遇到的所有项目。一旦遇到重复项,立即返回True def containsDuplicates1(a): seen = set() for i in a: if i in seen:

我有一个大整数的
列表
,作为输入。 我想写一个函数来检查列表中的项目是否都是不同的

方法1:使用
集合对列表进行迭代,并跟踪到目前为止遇到的所有项目。一旦遇到重复项,立即返回
True

def containsDuplicates1(a):
    seen = set()                                
    for i in a:                                 
        if i in seen:
            return True

        seen.add(i)         

     return False
时间复杂度:O(n)
空间复杂度:O(n)

方法2:将整个列表转换为
集合
并比较其长度

def containsDuplicates2(a):
    return len(a) != len(set(a))                
时间复杂度:O(n)(用于
设置(a)
操作)
空间复杂度:O(n)

当给定列表可能包含重复项时,第一种方法的性能优于第二种方法

这是我们能做的最好的了吗?或者在时间或空间上有没有更有效的方法来解决这个问题

附言:我已经阅读了所有关于堆栈溢出的相关问题,没有一个讨论这个问题的效率方面。因此,我在此提出要求

你能在时间或空间复杂度小于O(n)的情况下做到这一点吗

一句话,不

考虑所有元素都不同的情况。要确定这种情况,您需要至少查看每个元素一次。这需要O(n)时间


如果元素可以接受的值没有约束,则需要存储到目前为止看到的所有元素,以便根据看到的内容检查将来的元素。如果所有元素都是不同的,这需要O(n)内存。

在这种情况下,“性能更好”是什么意思?不,你不能-就大O而言,你必须在最坏的情况下遍历整个列表(没有重复)@ReblochonMasque“性能更好”意味着第一种方法在速度和空间方面都以最佳方式解决问题。是的,我认为你的评论是对我先前问题的回答。还请注意,如果
中的元素数量非常大,则在方法1的情况下,可能不会给出O(1)。不是我的反对票,这是对这个问题的合理回答——这是不可能的。你唯一能做的就是减少与
n
相关的常数,但它仍然保持线性。