[英]Efficiently compare two sets in python
我有兩個大的 integer sets set1
和set2
。 以下哪一項效率更高?
例子:
if(set1 == set2)
或者
if(len(set1)==len(set2))
這兩種說法完全不同。
if(set1==set2)
比較兩個集合中每個元素的相等性,並且當且僅當兩個集合完全相同時才評估為 true。
而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
正如 Nikhil Wagh 已經解釋的那樣,在最初的問題中,比較集合的長度和檢查兩個集合的相等性之間存在混淆。 我只想補充一點,簡單的s1 == s2
就足夠了,而且效率很高,因為 __eq__() (及其相反的 __ne__()) 方法已經執行了這種優化。 它首先檢查集合是否具有相同的長度,然后檢查集合是否具有相同的散列,然后才執行set_issubset
檢查。
您可以在文件setobject.c
中的函數set_richcompare()
中找到集合相等檢查的實現。 您不需要成為 C 中的期望來理解算法 - https://github.com/python/cpython/blob/master/Objects/setobject.c
比較長度比比較每個元素要快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.