根据我对内置类型5.7集类型的Python 2.7.2文档的解释,应该可以通过将A传递给set.remove(elem)
或从集B中删除集A的元素来实现。set.discard(elem)
从2.7.2的文档中:
请注意
__contains__()
,remove()
和discard()
方法可能是一组。
我将其解释为意味着我可以将传递set
给remove(elem)
或discard(elem)
,所有这些元素将从目标集中删除。我会用它来做一些奇怪的事情,例如从字符串中删除所有元音或从词频直方图中删除所有常用词。这是测试代码:
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [M...
Type "help", "copyright", "credits" or "license"
>>> a = set(range(10))
>>> b = set(range(5,10))
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b
set([8, 9, 5, 6, 7])
>>> a.remove(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: set([8, 9, 5, 6, 7])
>>> a.discard(b)
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
我希望返回:
>>> a
set([0, 1, 2, 3, 4])
我知道我可以做到这一点,a.difference(b)
并返回一个新的集合。或与set.difference_update(other)
; 或带有集合运算符a -= b
,它们可以就地修改集合。
那么这是文档中的错误吗?可set.remove(elem)
实际上不是买一套作为参数?还是文档涉及套组?鉴于difference_update
完成了我的解释,我想情况就是后者。
这还不够清楚吗?
编辑 经过3年额外的(一些专业的)python工作,最近又回到了这个问题,我现在意识到实际上可以通过以下操作来实现:
>>> c = a.difference(b)
set([0,1,2,3,4])
这就是我最初想要得到的。
编辑
经过4年多的python开发...我意识到可以使用设置文字和-
运算符更清楚地表示此操作;并且证明集差是非可交换的更完整。
>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a-b
set([0, 1])
>>> b-a
set([4, 5])
c = a.difference(b)
为我工作。谢谢!