我有一个列表L,如果x是L的成员,则x in L
的计算结果为True。x in smth
中我可以使用什么而不是L来单独评估为x的值为x ?
所以,我需要一些包含所有对象的东西,包括它自己,因为x也可以是这个“smth”。
答案 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)
定理:没有通用设置。
<强>证明即可。设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,我们就会反驳我们自己的定义。
因此,没有所有集合的集合。这称为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 )
但是,这不是严格的集合理论对象,因为内容实际上包含对父对象的引用。如果您要求根据上述证据区分对象,则不会发生这种情况。