有效地比较python中的两组

Tha*_*ana -3 python performance set

我有两个大整数集set1set2. 谁能告诉我下面哪一个更有效?

例子:

if(set1 == set2)
Run Code Online (Sandbox Code Playgroud)

或者

if(len(set1)==len(set2))
Run Code Online (Sandbox Code Playgroud)

ant*_*rov 18

正如 Nikhil Wagh 已经解释的那样,在最初的问题中,比较集合的长度和检查两个集合的相等性之间存在混淆。我只想补充一点,简单s1 == s2就足够了并且高效,因为 __eq__() (及其相反的 __ne__())方法已经执行了此优化。它首先检查集合是否具有相同的长度,然后检查集合是否具有相同的哈希值,然后才执行set_issubset检查。

set_richcompare()您可以在文件中找到设置相等检查函数的实现setobject.c。你不需要成为 C 语言的期望来理解算法 - https://github.com/python/cpython/blob/master/Objects/setobject.c


Nik*_*agh 10

您确实了解这两个陈述彼此完全不同。

if(set1==set2) 比较两个集合中每个元素的相等性,当且仅当两个集合完全相同时才计算为真。

if(len(set1)==len(set2))只比较两个集合的长度。即使您有两个长度相同的集合,也可能会出现它们不相同的情况。例如,考虑一下:

set1: [1, 3, 6, 29, 31]

set2: [1, 3, 7, 10, 15]

尽管这些集合具有相同的长度,但它们并不相同。

您可以这样做以节省时间。

if len(set1) == len(set2):
    if set1 == set2:
        //TODO when sets are equal
    else
        //TODO when sets are not equal.
else
    //TODO when sets are not equal
Run Code Online (Sandbox Code Playgroud)