[英]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.