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

标签 python set difference

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

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

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

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

最佳答案

问。这两种设置方法有什么区别?

A. 更新 版本从现有集合中减去、改变它,并有可能使其比原来更小。 非更新 版本生成一个新集,保持原始不变。

问。因为 difference_update 更新了 set,应该采取什么预防措施来避免从这个方法接收到 None 的结果?

A. Python 中的变异方法通常返回 None 以表明它们已经变异了一个对象。唯一的“预防措施”是不要将 None 结果分配给变量。

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

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

相比之下,非更新版本的算法取决于集合的大小。

如果 s 的大小是 t 的四倍或更多倍,则新集版本首先复制主集,然后丢弃其中的值。所以 "s - t 被实现为 n = s.copy(); n.difference_update(t))。当 st

大得多

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

关于Python:set.difference 和 set.difference_update 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27439192/

相关文章:

python - 覆盖 ChatterBot 中的预定义答案

java - 在方法中使用多个 return 语句

javascript - 如何在 Javascript 中获取两个日期选择器值之间的时间跨度?

python - 使用 with open,我得到文件对象,因为没有属性计数

Python,Google Places API

python - 如何将 mac os x en1 界面置于监控模式以与 python3 scapy 一起使用?

c++ - C++ 中是否有链接哈希集?

android - 如何在代码中创建滑动抽屉?

python - 在 Python 列表中查找 "x"最大差异

python-2.7 - 将 Keras 的指标与 sklearn.classification_report 的指标进行比较