簡體   English   中英

高效比較python中的兩組

[英]Efficiently compare two sets in python

我有兩個大的 integer sets set1set2 以下哪一項效率更高?

例子:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM