如何测试 x 是否为全集的成员?
我有一个列表L,如果x在L里面,x in L
就会返回True。那我可以用什么来代替L,让x in smth
无论x是什么值都能返回True呢?
所以,我需要一个包含所有对象的东西,包括它自己,因为x也可能是这个“smth”。
3 个回答
定理: 没有一个普遍的集合。
证明: 设 X
是一个集合,定义为 X = {\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
里面,那就和我们自己的定义矛盾了。
因此,所有集合的集合是不存在的。这被称为 罗素悖论。
那么,为什么要编程去创建一个违反了比我聪明得多的集合论者证明的结果的对象呢?如果这是我的面试问题,我会这样回答,如果他们坚持说这是可能的,我会建议他们解释一下问题的领域,因为从概念上讲,罗素已经根本性地证明了这是不可能的。
如果你想要一个更友好的问题,通常会给学习基础集合论的人提出来,可以试试 理发师悖论。
编辑: 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 )
但是,这并不是一个严格的集合论对象,因为内容实际上包含了对父对象的引用。如果你要求对象是独立的,按照上面的证明,这种情况是不会发生的。
你可以从内置的 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
class Universe:
def __contains__(_,x): return True
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。