根据我对 Built-In Types 5.7 Set Types 的 Python 2.7.2 文档的解释,应该可以通过将 A 传递给 set.remove(elem)
或 set.discard(elem)
来自 2.7.2 的文档:
Note, the elem argument to the
__contains__()
,remove()
, anddiscard()
methods may be a set.
我将此解释为意味着我可以将 set
传递给 remove(elem)
或 discard(elem)
并且所有这些元素都会从目标集中移除。我会用它来做一些奇怪的事情,比如从字符串中删除所有元音或 remove all common words from a word-frequency histogram .下面是测试代码:
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 开发之后......我意识到这个操作可以使用 set literals 和 -
运算符更清晰地表达;并且更完整地证明集差是不可交换的。
>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a-b
set([0, 1])
>>> b-a
set([4, 5])
最佳答案
set1-set2
set1 = {0,1,2,3}
set2 = {2,3,4,5}
set1 - set2 # {0, 1}
set2 - set1 # {4, 5}
但是,请注意,无论出于何种原因,您都不能在 python 中设置“+”...
关于Python 从集合中移除集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9056833/