如何测试x是否是通用集的成员?

时间:2011-02-02 15:36:44

标签: python math

我有一个列表L,如果x是L的成员,则x in L的计算结果为True。x in smth中我可以使用什么而不是L来单独评估为x的值为x ?

所以,我需要一些包含所有对象的东西,包括它自己,因为x也可以是这个“smth”。

3 个答案:

答案 0 :(得分:8)

class Universe:
    def __contains__(_,x): return True

答案 1 :(得分:2)

您可以从内置的list类继承并重新定义执行__contains__等测试时调用的item in list方法:

>>> class my_list(list):
    def __contains__(self, item):
        return True


>>> L = my_list()
>>> L
[]
>>> x = 2
>>> x
2
>>> x in L
True

答案 2 :(得分:0)

定理:没有通用设置。

<强>证明即可。设XX = {\empty, x},其中x是域中的每个可能元素。问题出现了,是X \in X?大多数集都没有这样定义,所以让我们定义一个新集Y. Y = {A \in X; A \notin A},即Y是不属于自己的所有集合的集合。

现在,Y \in Y?好吧,我们已经将Y定义为不属于自己的所有集合,因此Y不能存在于Y中,这与我们的假设相矛盾。

所以现在假设Y不在Y中。现在A肯定包含Y,因为Y本身不存在,但是Y的定义是这样的,如果我们将Y定义为Y,我们就会反驳我们自己的定义。

因此,没有所有集合的集合。这称为Russell's Paradox

那么,为什么要以编程方式尝试创建一个违反结果的对象,这个对象由设定理论家证明和测试比我更聪明?如果这是我的采访,这将是我的答案,如果他们坚持认为这是可能的,我建议解释问题领域是什么,因为从概念上讲,罗素从根本上证明了它是不可能的。

如果您想要通常为学习入门集理论的人提出用户友好的问题,请尝试Barber Paradox

编辑:Python允许您实现包含自身的对象。见:

class Universal(object):
    def __init__(self):
        self.contents = []

    def add(self, x):
        self.contents.append(x)

    def remove(self, x):
        self.contents.remove(x)

    def __contains__(self, x):
        return ( x in self.contents )

但是,这不是严格的集合理论对象,因为内容实际上包含对父对象的引用。如果您要求根据上述证据区分对象,则不会发生这种情况。