为什么对比操作设置返回False?

时间:2015-07-20 04:07:08

标签: python

我的代码有问题。我无法理解为什么会这样? 我将比较两个由> =<但所有输出都是假的!

>>> x=set([1,2,3])
>>> y=set([3])
>>> x<y
False
>>> x>y
False
>>> x==y
False

实际上我想知道为什么它返回False。

6 个答案:

答案 0 :(得分:1)

你犯了一个小错误:

>>> x = {1,2,3}
>>> y = {3}
>>> x > y
True
>>> x < y
False
>>> x == y
False

您测试了x < yy > x,它们给您的结果相同。现在您可以看到x > y

但是,有些集合实际上所有三个比较都是False

>>> x = {1,2,3}
>>> y = {1,2,4}
>>> x > y
False
>>> x < y
False
>>> x == y
False

这是由于集合<=>的实现,它通过子集逻辑比较集(x < y询问x严格子集y)。

答案 1 :(得分:0)

您完成了x<yy>x。这些都是一样的。可能你的意思是x<yy<x

答案 2 :(得分:0)

来自documentation -

  

此外,Set和ImmutableSet支持设置为设置比较。当且仅当每组中的每个元素都包含在另一组中时,两组相等(每组都是另一组的子集)。当且仅当第一组是第二组的适当子集(是子集,但不相等)时,集合小于另一个集合。当且仅当第一个集合是第二个集合的正确超集(是超集,但不相等)时,集合大于另一个集合。

因此y小于x。如果你做y < x,你就会成真 -

>>> x = set([1,2,3])
>>> y = set([3])
>>> x < y
False
>>> y < x
True

你的比较是 - x < y(x小于y,这是假的),y > x(y比x更好,与前一个相同),再次为假。而且x == y也是假的(因为两个集合都没有相同的元素)。

根据您添加的屏幕截图,似乎x为{1},y为{2}

你可以在我上面添加的文档中检查片段,在集合中,小于仅在左侧的集合是右侧集合的子集时返回true,在你的情况下,x和y都不是彼此的子集,因此x不小于y,y不小于y,它们不相等。

示例 -

>>> x = {1}
>>> y = {2}
>>> x < y
False
>>> y < x
False

答案 3 :(得分:0)

x<y

相同
y>x

和集合不是相同的集合,因此x == y也给出了假。

答案 4 :(得分:0)

改变内置容器检查相等性的方法的唯一途径是使它们包含值而不是“原始”包装值(包含在覆盖__ne__和{{1}的类中})。如果您需要更改容器本身使用相等性检查的方式,例如出于操作符的目的,右侧操作数是一个列表 - 以及容器的方法,例如它们自己的__eq__type(x).__eq__(y)是Python在内部执行的典型方式您编码为x == y)。

如果您正在谈论的是执行自己的相等检查(不更改容器本身在内部执行的检查),那么唯一的方法是将每个cont1 == cont2更改为(例如){{1}其中value_same是一个接受两个值的函数,并返回same(cont1, cont2, value_same)True之类的False。这可能是太具侵略性的WRT你指定的标准。

如果你可以自己更改容器(即创建容器对象的位置数远远小于检查两个容器是否相等的位置数),那么使用覆盖{{1}的容器子类是最好的。

答案 5 :(得分:0)

我无法在您的问题中复制结果

>>> x=set([1,2,3])
>>> y=set([3])
>>> x<y
False
>>> x>y
True
>>> x==y
False

如果有一个版本的Python为False返回x>y,那么它就是Python实现中的一个错误。

我怀疑你没有从你的控制台复制和粘贴,并重新输入了你认为所说的内容。