簡體   English   中英

Python:set.difference 和 set.difference_update 有什么區別?

[英]Python: What's the difference between set.difference and set.difference_update?

s.difference(t)返回一個在t 中沒有元素的新集合。

s.difference_update(t)返回一個更新的集合,在t 中沒有元素。

這兩種設置方法有什么區別? 因為difference_update更新了set,​​應該采取什么預防措施來避免這種方法收到None的結果呢?

在速度方面, set.difference_update 不應該更快,因為您只是從 set 中刪除元素而不是像 set.difference() 中那樣創建新的集合?

問:這兩種設置方法有什么區別?

A.更新版本從現有集合中減去,對其進行變異,並可能使其比原來更小。 非更新版本會產生一個新的集合,而原始版本保持不變。

Q.因為difference_update更新了sets,應該采取什么預防措施來避免這種方法收到None的結果?

A. Python 中的變異方法通常返回None以表明它們已經變異了一個對象。 唯一的“預防措施”是不要將None結果分配給變量。

問:就速度而言,set.difference_update 不應該更快,因為您只是從 set 中刪除元素而不是像 set.difference() 中那樣創建一個新集合?

A.是的,更新版本的算法只是丟棄值。

相反,非更新版本的算法取決於集合的大小。

如果s的大小是t 的四倍或更多倍,則新集版本首先復制主集,然后丟棄其中的值。 所以"s - t被實現為n = s.copy(); n.difference_update(t) ) 。當s遠大於t時使用該算法

否則,非更新版本的算法是創建一個空的新集合n ,循環s的元素並將它們添加到n如果它們不存在於t 中

difference_update就地更新集合而不是創建一個新集合。

>>> s={1,2,3,4,5}
>>> t={3,5}
>>> s.difference(t)
{1, 2, 4}
>>> s
{1, 2, 3, 4, 5}
>>> s.difference_update(t)
>>> s
{1, 2, 4}

暫無
暫無

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

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