Python中的相等和不相等运算符

9nvpjoqh  于 2022-12-25  发布在  Python
关注(0)|答案(1)|浏览(160)

假设我有这两个列表:

number_list_1 = [1, 2, 3, 4, 5]
number_list_2 = [1, 2, 3, 4, 5]

那么假设我想知道这两个列表是否相等(在Python中有很多方法可以做到这一点,但这不是我要找的,而且这在Python中也不是一个好的方法)
溶液1:

def list_equality_1(l1, l2):

    # Assuming that two array like objects have the same length
    length = len(l1)

    for i in range(length):
        if l1[i] == l2[i]:
            continue
        else:
            return False
    return True

溶液2:

def list_equality_1(l1, l2):

    # Assuming that two array like objects have the same length
    length = len(l1)

    for i in range(length):
        if l1[i] != l2[i]:
            return False
    return True

在这两种解决方案中,每次循环时,我们都在计算if语句,对于第一个,我们在计算是否相等,对于第二个,我们在计算第i个元素是否不相等。我的问题是哪一个更好?首先计算'equality',然后使用else语句,还是计算'not equality'?我想知道编译器是如何处理这个问题的。

pgpifvop

pgpifvop1#

  • 我的问题是哪个更好 *

我的回答是第二个更好。

  • 您可以减少线路浪费
  • 大家都知道continue是隐式的

我总是在必要的时候使用第二段代码,即使像你之前说的,在Python中有几种其他的方法来比较list,我说的是C/C++。

length = len(l1)

for i in range(length):
    if l1[i] != l2[i]:
        return False
return True

这个代码是无用的冗长,我会缩短它这样。

for first, second in zip(l1, l2):
    if first != second:
        return False
return True

阅读有关内置类zip的文档可能会对您有所帮助。
默认情况下,zip()在最短可迭代项用完时停止,它将忽略较长可迭代项中的剩余项,将结果截断到最短可迭代项的长度。
因此,这种替代方法只适用于len(l1) == len(l2),但您的代码也是如此。

  • 正如我之前所说,我想知道编译器如何处理相等(==)和不相等(!=)操作符。*

嗯,我不认为你曾经编译过你的Python代码,这就是为什么你没有一个.asm.o.exe文件来检查。

  • 我想知道这些运算符的复杂性 *

它们的时间复杂度都是O(1)

拆卸

这两者是等价的,它们生成几乎相同的指令集,除了第100行之后的一些东西,但这不会影响性能。

相关问题