首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: set.difference和set.difference_update有什么区别?

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

Stack Overflow用户
提问于 2014-12-12 07:56:56
回答 2查看 8K关注 0票数 7

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

s.difference_update(t)返回t中没有元素的更新集。

这两种方法有什么区别?由于difference_update更新集的设置,应该采取哪些预防措施来避免从此方法接收任何结果?

就速度而言,set.difference_update不应该更快吗?因为您只是从set s中删除元素,而不是创建像set.difference()这样的新集合。

EN

回答 2

Stack Overflow用户

发布于 2014-12-12 08:04:43

Q.这两种集合方法有什么区别?

A.更新版本从现有的集合中减去,对其进行变异,并可能使其比原来的更小。非更新版本产生一个新集,使原件保持不变。

Q.,因为difference_update更新集,应该采取什么预防措施来避免从这种方法中收到任何结果?

Python中的A.变异方法通常不返回任何值,以指示它们已对对象进行了变异。唯一的“预防措施”是不将无结果赋值给变量。

就速度而言,Q.,难道set.difference_update不应该更快吗?因为您只是从set s中删除元素,而不是创建像set.difference()这样的新集合?

A.是的,更新版本的算法只是丢弃值。

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

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

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

票数 13
EN

Stack Overflow用户

发布于 2014-12-12 08:02:19

difference_update更新已就位的集合,而不是创建新的集合。

代码语言:javascript
复制
>>> 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}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27439192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档