Python Сравнение кода с if проверяет False, когда оно должно быть True - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть следующий Python код ниже. Я ожидаю, что код вернет True, но когда я его запускаю, кажется, он всегда возвращает False. Кажется, сбой при проверке, если 361 361, но я не могу понять, почему:

def comp(array1, array2):
    if array1 is None or array2 is None or len(array1) is 0 or len(array2) is 0 or len(array1) is not len(array2):
        return False

    aListSquared = [x * x for x in sorted(array1)]
    array2.sort()

    print(aListSquared)
    print(array2)

    for x in range(len(aListSquared)):
        print('{0}:{1}'.format(aListSquared[x], type(aListSquared[x])))
        print('{0}:{1}'.format(array2[x], type(array2[x])))

        if int(aListSquared[x]) is not int(array2[x]):
            return False

    return True


a1 = [121, 144, 19, 161, 19, 144, 19, 11]
a2 = [11 * 11, 121 * 121, 144 * 144, 19 * 19, 161 * 161, 19 * 19, 144 * 144, 19 * 19]
print(comp(a1, a2))

Может кто-нибудь сказать мне, что я делаю неправильно, или почему проверка не работает правильно ?

Большое спасибо

Ответы [ 3 ]

5 голосов
/ 19 февраля 2020

В ваших строках

if array1 is None or array2 is None or len(array1) is 0 or len(array2) is 0 or len(array1) is not len(array2):

и

if int(aListSquared[x]) is not int(array2[x]):

вы используете оператор is для сравнения двух целых чисел. Это не то, как оператор должен использоваться в Python: оператор должен проверять идентичность объекта, но вам нужно только узнать, совпадает ли значение. В вашем случае вам следует просто использовать == вместо is и != вместо is not соответственно.

Для получения дополнительной информации см. Документацию Python по Сравнение значений и Сравнение идентификаторов , а также Оператор "is" ведет себя неожиданно с целыми числами , например.

2 голосов
/ 19 февраля 2020

Этот синтаксис

if int(aListSquared[x]) is not int(array2[x]):

отличается от

if int(aListSquared[x]) != int(array2[x]):

. Пожалуйста, обратитесь к этому Python! = Операция против "не"

1 голос
/ 19 февраля 2020

Переписав это выражение:

, если int (aListSquared [x]) не является int (array2 [x]): вернуть False

с этим:

, если int (aListSquared [x])! = int (array2 [x]): вернуть False

Код возвращает True.

...