有效地比较python

时间:2017-09-26 09:14:45

标签: python performance set

我有两个大整数集set1set2。任何人都可以告诉我下面哪一个更有效率?

示例:

if(set1 == set2)

if(len(set1)==len(set2))

3 个答案:

答案 0 :(得分:2)

您确实理解这两个陈述完全不同。

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

答案 1 :(得分:0)

比较长度比比较每个元素要快。

答案 2 :(得分:0)

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

您可以在文件set_richcompare()中的函数setobject.c中找到集合相等性检查的实现。您无需对C有所期待就可以了解算法-https://github.com/python/cpython/blob/master/Objects/setobject.c