我在Python中观察到一种奇怪的行为:
方法一
如果我这样做:
numberset=set([1,2,3])
numberset.remove(1)
现在numberset
{2, 3}
,正如预期的那样。
方法二
但是,如果我这样做:
numberset=set([1,2,3]).remove(1)
numberset
现在是NoneType
,即甚至不是set
。numberset
不就是set([1,2,3])
的名称吗,那么为什么第二种方法的结果与第一种方法numberset
不同呢?
那是因为.remove
的返回类型是None
:它不返回任何内容。它只会引发一个KeyError
值不在集合中。
如果您这样做,您的第一个代码将等于第二个代码:
numberset = set([1,2,3])
numberset = numberset.remove(1)
这也会导致numberset
被None
。
如果要将该代码放在一行中,可以从集合中减去元素:
numberset = set([1, 2, 3]) - set([1])
使用集合减法,您还可以处理删除不在集合中的项目:
set([1, 2, 3]).remove(4) # raises KeyError
set([1, 2, 3]) - set([4]) # return a set with elements: 1, 2, 3
正如评论中指出的,您可以/应该使用一组文字:{1, 2, 3}
。这相当于set([1, 2, 3])
.同样,您可以编写:
numberset = {1, 2, 3} - {1}
以PEP20结束 - Python的禅宗名言:">简单总比复杂好。