假设我有这两个列表:
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'?我想知道编译器是如何处理这个问题的。
1条答案
按热度按时间pgpifvop1#
我的回答是第二个更好。
continue
是隐式的我总是在必要的时候使用第二段代码,即使像你之前说的,在Python中有几种其他的方法来比较
list
,我说的是C/C++。这个代码是无用的冗长,我会缩短它这样。
阅读有关内置类
zip
的文档可能会对您有所帮助。默认情况下,
zip()
在最短可迭代项用完时停止,它将忽略较长可迭代项中的剩余项,将结果截断到最短可迭代项的长度。因此,这种替代方法只适用于
len(l1) == len(l2)
,但您的代码也是如此。嗯,我不认为你曾经编译过你的Python代码,这就是为什么你没有一个
.asm
,.o
或.exe
文件来检查。它们的时间复杂度都是
O(1)
。拆卸
这两者是等价的,它们生成几乎相同的指令集,除了第100行之后的一些东西,但这不会影响性能。