如果给定的数字是列表中存在的两个不同数字的总和(仅在一次过程中),如何返回“True”?

2024-06-17 18:03:46 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能告诉我下面的解决方案“一次通过”是否可行吗

给定一个数字列表和一个数字k,返回列表中的任意两个数字加起来是否为k

比如说,, 给定{}的{}和{},返回{},因为{}是{}

奖励:你能一次完成吗

def verify(list):
    for i in range(len(list)):
        j = k - list[i]
        if j in list:
            return True
    return False

Tags: infalsetrue列表forlenreturnif
3条回答

我想出了两个解决办法

第一个,我很确定就是你被要求的,只需一次通过,就可以完成所有可能的总和——最坏的情况:

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

另一个效率较低(因为它必须对向量firt进行排序,它至少已经具有n*log(n)复杂性),并且您必须手动执行另一个过程。这不是你所要求的,但因为更容易理解,我也把它留给你:

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

第一种解决方案比第二种快得多

关于你的解决方案,我必须告诉你几件事。避免使用单词“list”作为变量或参数,因为它是Python语言中的一个单词,用于将另一个数据类型转换为数据类型“list”(即,如果您有s = "hello",并且您有s = list(s),那么您就得到了s中有['h','e','l','l','o'])。还要记住,函数头(def…)下面的所有代码都需要缩进,可以是四个空格、两个空格或一个制表符(否则会出现解释错误)。您还应该注意,在您的解决方案中使用了k,但它不是一个已定义的变量;您应该将其作为参数传递或在函数内部定义,否则无法使用它(建议使用前者,而不是后者)。即使考虑到这一点,您的函数也没有执行文本中要求的操作:它实际上在for循环的每一步从k中减去第i个元素,并在每次迭代中检查减法的结果是否属于列表

使用itertools组合来获取列表中所有可能的数字对

from itertools import combinations
li =[10, 15, 3, 7]
k =17

answer = k in (map(sum,combinations(li,2)))

print(answer)

我很抱歉,伙计们,我发现很难找到你建议的线索的答案,而且解决方案大多是Java。。你能看一下另一个提议吗:首先,我们创建一份我们的清单

def verify(l, K):
   for i in range(len(l)):
       j = k - l[i]
       if j in l:
           return True
       l = l.pop([i])
   return False

谢谢大家!

相关问题 更多 >