编写判断整数列表中是否存在和为指定值的不同整数对函数的技术求助(代码提前终止问题)
思路指引:解决数对求和判断的遍历问题
首先,咱们先揪出你代码里的核心问题:你在第一次遇到和不为k的数对时,就直接return了——这就导致函数刚检查完第一组(比如你的例子里的1和2),因为1+2≠9,就直接返回“不存在”的结论,根本没机会去检查后面的1+8、2+7这些符合条件的数对。
给你几个关键的思路调整方向:
调整return的时机:
- 只有当找到符合条件的数对时,才应该立即返回“存在”的结果(这时候可以提前终止,因为已经找到答案了);
- 而“不存在这样的数对”这个结论,必须等所有数对都检查完毕,且没有找到任何符合条件的组合之后,再返回。
优化循环逻辑的小提示:
- 你用集合去重的思路是没问题的(题目要求“不同的整数”,去重后不会影响结果);
- 现在你需要把else分支里的
return(print(...))删掉,只保留if条件里的返回; - 把“不存在”的输出/返回语句,移到两层循环的外面——也就是当所有循环都跑完,还没找到符合条件的数对时,再执行这部分。
另外,给你一个额外的优化思路(可选,先把基础逻辑改对再考虑):其实不需要双重循环,你可以遍历每个元素num,然后检查k - num是否在集合里,同时要注意排除num本身等于k - num的情况(比如k=6,不能用3+3,因为需要不同的整数),这种方法的时间复杂度会更低。
附你的原始代码:
def sumsToK(k, list1): newSet = set(list1) #creates set based on list1 to remove any duplicate values print (newSet) newSet = list(newSet) #convert back to list so I can iterate through values for i in range(len(newSet)): for j in range(i+1, len(newSet)): print(newSet[i],newSet[j]) if (newSet[i]) + (newSet[j]) == k: return (print('There is at least one pair if integers that adds up to k')) else: return(print('There are is no pair of distinct integers that adds up to k')) k = 9 list1 = [1, 2, 3, 4, 5, 5, 5, 6, 7, 8, 9, 10] #Multiple distinct pairs will sum to 9 print ((sumsToK(k, list1)))
内容的提问来源于stack exchange,提问作者OldDogNewTricks
相关产品推荐
相关产品推荐

