我来自 C++/Java 背景,并在下面完成了“TwoNumberSum”算法的简单实现。我首先使用传统的嵌套循环以更 C/Java 的方式实现它,然后使用“in”运算符。我希望两者都在相似的时间执行,因为理想情况下,'in' 也应该遍历列表,这应该会导致嵌套循环,因此在某处类似的执行时间,但令我惊讶的是,第一个算法需要的时间是第二个算法的两倍。有人可以解释是什么导致了运行时如此巨大的差距吗?
我在执行代码段时得到以下结果。
算法一的执行时间:1.023191
算法2的执行时间:0.46218059999999994
from timeit import timeit
# First Algorithm using simple lists/arrays
code1 = """
def TwoNumberSum(list, sum):
for i in range(0, len(list)-1):
for j in range(i+1, len(list)):
if list[i] + list[j] == sum:
return [list[i], list[j]]
return []
TwoNumberSum([3, 5, -4, 8, 11, 1, -1, 6], 10)
"""
# Second Algorith similar to first using 'in' operator
code2 = """
def TwoNumberSum(list, sum):
for i in range(0, len(list)-1):
if sum-list[i] in list[i+1:-1]:
return [list[i], sum-list[i]]
return []
TwoNumberSum([3, 5, -4, 8, 11, 1, -1, 6], 10)
"""
print(f"Execution Time of Algo 1: {timeit(code1, number=100000)}")
print(f"Execution Time of Algo 2: {timeit(code2, number=100000)}")