Python 与 if 的代码比较在应该为 True 时验证了 False

Python code comparison with if validates False when it should be True

我下面有以下 Python 代码。我期待代码 return True 但是当我 运行 它时,它似乎总是 return 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))

任何人都可以告诉我我做错了什么或者为什么验证似乎没有正常工作吗?

非常感谢

在你的台词中

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

如需进一步阅读,请参阅有关 Value comparisons and Identity comparisons, as well as "is" operator behaves unexpectedly with integers 的 Python 文档。

重写这个表达式:

如果 int(aListSquared[x]) 不是 int(array2[x]): return错

有了这个:

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

代码 return 正确。

这个语法

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

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

请参考这个Python != operation vs "is not"