Как проверить, является ли x членом универсального множества? - PullRequest
4 голосов
/ 02 февраля 2011

У меня есть список L, и x in L оценивается как True, если x является членом L. Что я могу использовать вместо L, чтобы x in smth вычислял как True независимо от значения x?

Итак, мне нужно что-то, что содержит все объекты, включая самого себя, потому что x также может быть этим «чем-то».

Ответы [ 3 ]

8 голосов
/ 02 февраля 2011
class Universe:
    def __contains__(_,x): return True
2 голосов
/ 02 февраля 2011

Вы можете наследовать от встроенного класса 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
0 голосов
/ 02 февраля 2011

Теорема : Универсального множества не существует.

Доказательство .Пусть 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 )

Однако, это не строгий теоретический объект множества, так как содержимое фактически содержит ссылку на родительский объект.Если вы требуете, чтобы объекты отличались в соответствии с приведенным выше доказательством, это не может произойти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...