Python 2.7 中集的对称差异与带变更的对称差异有什么区别?

0 投票
2 回答
1084 浏览
提问于 2025-04-18 10:56

下面这两种实现集合的方式有什么不同呢?
在我的情况下,它们的结果都是一样的。

集合的对称差异(带修改)。

s = set([1, 2, 3, 4, 5])
s.symmetric_difference_update(set ([5, 6, 7]))
print s

set([1, 2, 3, 4, 6, 7]) #OUTPUT

集合的对称差异。

print set([1, 2, 3, 4, 5]).symmetric_difference(set([5, 6, 7]))

set([1, 2, 3, 4, 6, 7]) #OUTPUT

2 个回答

2

根据Python标准库的文档s.symmetric_difference_update(otherset)这个方法会用两个集合的对称差更新原来的集合,而s.symmetric_difference(otherset)这个方法只是返回对称差的结果。我们来对比一下:

In [1]: s = set([1, 2, 3, 4, 5])

In [2]: s.symmetric_difference(set ([5, 6, 7]))
Out[2]: {1, 2, 3, 4, 6, 7}

In [3]: print s
set([1, 2, 3, 4, 5])

在这种情况下,s的内容不会改变。

2

它们的结果不一样。你做的事情也不一样。试试这个:

s = set([1, 2, 3, 4, 5])
s.symmetric_difference_update(set ([5, 6, 7]))
print s

对比这个:

s = set([1, 2, 3, 4, 5])
s.symmetric_difference(set ([5, 6, 7]))
print s

或者,试试这个:

print set([1, 2, 3, 4, 5]).symmetric_difference_update(set([5, 6, 7]))

对比这个:

print set([1, 2, 3, 4, 5]).symmetric_difference(set([5, 6, 7]))

现在看到区别了吗?

撰写回答