在同一行中创建集合和删除元素比在 Python 中在不同行中创建集合和删除元素产生不同的结果。为什么?



我在Python中观察到一种奇怪的行为:

方法一

如果我这样做:

numberset=set([1,2,3])
numberset.remove(1)

现在numberset{2, 3},正如预期的那样。

方法二

但是,如果我这样做:

numberset=set([1,2,3]).remove(1)

numberset现在是NoneType,即甚至不是setnumberset不就是set([1,2,3])的名称吗,那么为什么第二种方法的结果与第一种方法numberset不同呢?

那是因为.remove的返回类型是None:它不返回任何内容。它只会引发一个KeyError值不在集合中。

如果您这样做,您的第一个代码将等于第二个代码:

numberset = set([1,2,3])
numberset = numberset.remove(1)

这也会导致numbersetNone

如果要将该代码放在一行中,可以从集合中减去元素:

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的禅宗名言:">简单总比复杂好。

最新更新