我有两个大整数集set1
和set2
。任何人都可以告诉我下面哪一个更有效率?
示例:
if(set1 == set2)
或
if(len(set1)==len(set2))
答案 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