我的代码有问题。我无法理解为什么会这样? 我将比较两个由> =<但所有输出都是假的!
>>> x=set([1,2,3])
>>> y=set([3])
>>> x<y
False
>>> x>y
False
>>> x==y
False
实际上我想知道为什么它返回False。
答案 0 :(得分:1)
你犯了一个小错误:
>>> x = {1,2,3}
>>> y = {3}
>>> x > y
True
>>> x < y
False
>>> x == y
False
您测试了x < y
和y > 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<y
和y>x
。这些都是一样的。可能你的意思是x<y
和y<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实现中的一个错误。
我怀疑你没有从你的控制台复制和粘贴,并重新输入了你认为所说的内容。