设定差异与集合减法之间的差异

时间:2015-06-22 18:00:24

标签: python

以下两个陈述之间有什么区别吗?

s1 = set([1,2,3])
s2 = set([3,4,5])

>>> s1 - s2
set([1, 2])
>>> s1.difference(s2)
set([1, 2])

3 个答案:

答案 0 :(得分:30)

set.difference, set.union...可以将任何可迭代的作为第二个arg,而两个都需要设置为使用-,输出没有区别。

Operation      Equivalent       Result
s.difference(t) s - t   new set with elements in s but not in t

使用.difference,您可以执行以下操作:

s1 = set([1,2,3])

print(s1.difference(*[[3],[4],[5]]))

{1, 2}

使用*(iterable,iterable)语法创建集合时效率更高,因为您不创建中间集,您可以看到一些比较here

答案 1 :(得分:6)

快速浏览一下documentation可能不太明显,但深埋在段落内部专门用于区分方法调用与运算符版本

  

注意,union(),intersection()的非运算符版本,   difference()和symmetric_difference(),issubset()和issuperset()   方法将接受任何iterable作为参数。相比之下,他们的   基于运营商的对应者要求他们的参数是集合。这个   排除了set('abc') & 'cbs'等容易出错的错误结构   更具可读性set('abc').intersection('cbs')

答案 2 :(得分:3)

文档似乎表明差异可能需要多个集合,因此对于以下内容可能更有效和更清晰:

s1 = set([1, 2, 3, 4])
s2 = set([2, 5])
s3 = set([3, 6])
s1.difference(s2, s3) # instead of s1 - s2 - s3

但我建议进行一些测试来验证。