[英]Check if there are three numbers in the list that add up to target
我需要创建一个函数,该函数将一个正数列表和一个正数目标作为输入,如果列表中有三个数字加到目标中,则返回True
。
到目前为止,我已经提出了:
def subsetSum(l, sum):
found = False
for i in range(len(l) - 2):
for j in range(i + 1, len(l) - 1):
for k in range(j + 1, len(l)):
return True
return found
替换:
>>> subsetSum([5, 4, 10, 20, 15, 19], 38)
True
因此4、15和19的总和等于38,这是我的目标。 当我运行此代码时,结果为True
。
但是,当我运行以下代码时,它仍然显示为True
,尽管数字列表中没有三个数字加起来等于目标,即10。
>>> subsetSum([5, 4, 10, 20, 15, 19], 10)
True
使用itertools.combinations
可能是最简单,最有效的解决方案:
from itertools import combinations
def subset_sum(lst, target):
return len(lst) > 2 and any(sum(x) == target for x in combinations(lst, 3))
例子:
>>> subset_sum([5, 4, 10, 20, 15, 19], 38)
True
>>> subset_sum([10], 38)
False
万一您想坚持自己的代码,可以通过以下方法解决:
def subset_sum(l, target):
if len(l) < 3:
return False
for ki, i in enumerate(l):
for kj, j in enumerate(l):
for kk, k in enumerate(l):
# To make sure we sum elements ONLY on different positions
if kk != kj and kk != ki and kj != ki and i + j + k == target:
return True
return False
这个解决方案不是很快,但是可以。
您总是返回True。 由于python可以在一个函数中处理多个return语句,因此不需要找到的变量。 摆脱发现,最后返回False。 您需要一个if语句来比较sum和输入值,当满足条件时返回True,否则返回False。 现在,您的代码本质上是返回True的一种复杂方式,您只是在抽象值中进行迭代,而不是将这些值分配给任何值,然后在返回found之前返回True。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.