<p>我想出了两个解决办法</p>
<p>第一个,我很确定就是你被要求的,只需一次通过,就可以完成所有可能的总和——最坏的情况:</p>
<pre><code>def verify_2(l,k):
i = 0
j = 0
n = len(l)
while i < n - 1:
j = i + 1
while j < n:
if l[i] + l[j] == k:
return True
j = j + 1
i = i + 1
return False
print(verify_2(l = [10,15,3,7], k = 17)) #RETURNS TRUE
print(verify_2(l = [10,15,3,7], k = 6)) #RETURNS FALSE
</code></pre>
<p>另一个效率较低(因为它必须对向量firt进行排序,它至少已经具有<code>n*log(n)</code>复杂性),并且您必须手动执行另一个过程。这不是你所要求的,但因为更容易理解,我也把它留给你:</p>
<pre><code>def verify(l,k):
l.sort()
for i in range(len(l) - 1):
if l[i] + l[i+1] == k:
return True
return False
print(verify(l = [10,15,3,7], k = 17)) #RETURNS TRUE
print(verify(l = [10,15,3,7], k = 6)) #RETURNS FALSE
</code></pre>
<p>第一种解决方案比第二种快得多</p>
<p>关于你的解决方案,我必须告诉你几件事。避免使用单词“list”作为变量或参数,因为它是Python语言中的一个单词,用于将另一个数据类型转换为数据类型“list”(即,如果您有<code>s = "hello"</code>,并且您有<code>s = list(s)</code>,那么您就得到了s中有<code>['h','e','l','l','o']</code>)。还要记住,函数头(def…)下面的所有代码都需要缩进,可以是四个空格、两个空格或一个制表符(否则会出现解释错误)。您还应该注意,在您的解决方案中使用了<code>k</code>,但它不是一个已定义的变量;您应该将其作为参数传递或在函数内部定义,否则无法使用它(建议使用前者,而不是后者)。即使考虑到这一点,您的函数也没有执行文本中要求的操作:它实际上在for循环的每一步从k中减去第i个元素,并在每次迭代中检查减法的结果是否属于列表</p>