Python:set.difference和set.difference_update有什么区别?

5 python set difference

s.difference(t)返回一个t中没有元素的新集合.

s.difference_update(T)返回一组更新与在没有元素.

这两种方法有什么区别?因为difference_update更新了set s,所以应该采取什么预防措施来避免从这个方法中接收None的结果?

在速度方面,不应该设置set.difference_update更快,因为你只是从set中删除元素而不是像set.difference()那样创建一个新的集合?

Ray*_*ger 12

问:这两种方法有什么区别?

:更新版本从现有集合中减去,对其进行变更,并可能使其比原来更小.在不更新版本产生新集,留下原件不变.

问:由于difference_update更新了set s,应采取哪些预防措施以避免从此方法中收到None的结果?

A.在Python诱变方法通常返回,以此来表明他们已经突变的对象.唯一的"预防措施"是不将None结果赋给变量.

问:就速度而言,不应该设置set.difference_update更快,因为你只是从set中删除元素而不是像set.difference()那样创建一个新的集合?

答:是的,更新版本的算法只是丢弃值.

相反,非更新版本的算法取决于集合的大小.

如果s的大小是t的四倍或更多倍,则新的集合版本首先复制主集合,然后从中丢弃值.所以"s - t实现为n = s.copy(); n.difference_update(t)).当s远大于t时使用该算法

否则,非更新版本的算法是创建一个空的新集合n,循环遍历s的元素,如果它们不存在于t中则将它们添加到n.


iva*_*eev 8

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}
Run Code Online (Sandbox Code Playgroud)