Как проверить на рефлексивность в Python? - PullRequest
0 голосов
/ 22 марта 2019

В настоящее время я работаю над проектом на Python, который сравнивает упорядоченные пары со списком и тестов на рефлексивность .

Я не уверен, что понимаю, почему это работает. Может кто-нибудь помочь объяснить, что делают a1 и a2 и как они работают в цикле for?

Вот фрагмент:

    a = []
    y = []

    for a1, a2 in r:
        if (a1 == a2):
            y.append(a1)

        if (a1 not in a):
            a.append(a1)

    if (set(a) == set(y)):
        print("Reflexive: Yes")

    else:   
        print("Reflexive: No")

Большое спасибо заранее.

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Ваш код добавляет значение в y, когда ваша пара в два раза превышает это значение.Так что y будет списком значений по отношению к себе.Кроме того, вы добавляете значение в a, если его еще нет.Таким образом, a является (предполагается) [1] списком всех значений в отношении r.Наконец, вы решаете, что ваше отношение рефлексивно, если все значения (список a) связаны между собой (список y).

[1] Кажется, есть небольшая ошибка в том, что если значениеприсутствует только справа (a2), вы не будете помещать его в a, как если бы он был слева (a1).Поэтому отношение r=[(1, 1), (1, 2)] будет считаться рефлексивным в вашем случае.Чтобы исправить это, вы можете добавить:

    if a2 not in a:
        a.append(a2)

Поскольку при окончательном тестировании ваши списки y и a преобразуются в наборы, вы, вероятно, можете отказаться от теста перед вставкой в ​​a.Вы также можете использовать наборы с самого начала вместо создания списков и преобразования их в наборы.

0 голосов
/ 22 марта 2019

a1 и a2 - ваши заказанные пары. Первый оператор if сравнивает их и, если они равны, добавляет a1 к вектору y. После этого a1 добавляется к вектору a, если только он не является частью вектора a. Последнее выражение if сравнивает, если вектор a и y равны.

Это хороший тест на рефлексивность, поскольку первое утверждение проверяет, не ссылаются ли какие-либо элементы на себя, не добавляя их в вектор y, а второе проверяет наличие дубликатов, не добавляя их в вектор a. Если оба набора равны в конце, они рефлексивны.

Редактировать: Фрэнсис Колас прав в этой ошибке. Добавь свою часть к коду и все хорошо.

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