簡體   English   中英

集合差與集合減法

[英]Set difference versus set subtraction

集合上的-.difference()有何區別? 顯然語法不一樣,一個是二元運算符,一個是實例方法。 還有什么?

s1 = set([1,2,3])
s2 = set([3,4,5])

>>> s1 - s2
set([1, 2])
>>> s1.difference(s2)
set([1, 2])

set.difference, set.union...可以將任何可迭代對象作為第二個參數,而兩者都需要設置為使用- ,輸出沒有區別。

Operation         Equivalent   Result
s.difference(t)   s - t        new set with elements in s but not in t

使用 .difference 您可以執行以下操作:

s1 = set([1,2,3])

print(s1.difference(*[[3],[4],[5]]))

{1, 2}

使用*(iterable,iterable)語法創建集合時也更有效*(iterable,iterable)因為您不創建中間集合,您可以在此處查看一些比較

快速瀏覽一下, 文檔中可能不太明顯,但埋藏在一個段落深處,專門用於區分方法調用與操作符版本

請注意,union()、intersection()、difference() 和 symmetric_difference()、issubset() 和 issuperset() 方法的非運算符版本將接受任何可迭代對象作為參數。 相比之下,它們的基於運算符的對應物需要設置它們的參數。 這排除了像set('abc') & 'cbs'這樣容易出錯的結構,取而代之的是更具可讀性的set('abc').intersection('cbs')

該文檔似乎表明差異可能需要多組,因此對於以下內容可能更有效和更清晰:

s1 = set([1, 2, 3, 4])
s2 = set([2, 5])
s3 = set([3, 6])
s1.difference(s2, s3) # instead of s1 - s2 - s3

但我建議進行一些測試來驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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