这是你想要的吗?
myset = {1, 2, 3, 4}
for element in myset - {3}:
print(element)
输出:
1
2
4
你说得对,remove()
在成功时返回的是 None
而不是结果集,它是就地操作而不支持链接。然而,像 -
这样的中缀运算符将被评估并返回结果。从某种意义上说,你可以把 set1 - set2
看作是 -(set1, set2)
,它确实返回了结果或者如果你喜欢的话,可以看作是 set1.-(set2)
。
事实上,这个方法是存在的:
myset = {1, 2, 3, 4}
for element in myset.difference({3}):
print(element)
如果您查看Python关于集合的文档,它们主要从功能角度进行介绍,期望您使用中缀和前缀运算符以及函数。但是,像Python中的所有对象一样,set
只是一个对象,并且具有与大多数(如果不是全部)运算符匹配的方法。
如果您有一个表达式,例如set1 - set2
,那也是一个set
,因此您甚至可以在其上调用方法:
print(({1, 2, 3} - {3, 4, 5}).union({9}))
用户@chepner在评论中正确指出,该方法使您可以提供除
set
之外的其他类型作为参数,例如
tuple
:
myset = {1, 2, 3, 4}
for element in myset.difference((3,)):
print(element)
这样可能会稍微更快一些,但请记住这种方法行不通:
myset = {1, 2, 3, 4}
for element in myset - (3,):
print(element)
虽然使用元组调用.difference()
可能更快,但如果代码速度真的很重要,你应该测试一下myset - {3}
是否比myset.difference((3,))
更快。尤其是因为你真正想做的事情可能并不是那么琐碎。
difference()
吗?或许像这样set([1,2,3]).difference(set([3]))
。 - JonSGmyset.remove(myelement)
而不是myset.copy().remove(myelement)
。也许我的大脑解析器是少数派! - slothrop