2015-10-10 31 views
-2

我目前正在尝试在Python中编写一个函数,该函数将采用subsetSum(lst,num)并遍历列表lst,如果有三个值合计为num,则返回True。如果列表lst中没有三个值合计为number num,则函数返回False。以下是我迄今为止(我刚开始学习Python,所以请不要苛刻!!):Python subsetSum函数

def subsetSum(lst, n): 

    ''' checks to see if 3 values in lst add up to n and returns True, otherwise false''' 

    if n == 0 or n < 1: 
     return False 
    elif len(lst) < 3: 
     return False 

    for i in range(len(lst)): 
     if lst[0] == n: 
      return True 
    return False 

不知怎的,我需要通过这个列表LST进行迭代,找到3个值加起来到n。

+0

向我们显示您的尝试,我们将帮助您改进它。 –

+0

这三个数字是否必须在列表中顺序出现? – martineau

+0

@martineau不,数字不必在列表中顺序出现。 –

回答

0

这是使用嵌套循环的溶液中。我只是刚刚学习语言,所以它可能不是惯用的蟒蛇,但它的工作原理:

def subset_sum(lst, n): 
    for i in range(len(lst)): 
     for j in range(i + 1, len(lst)): 
      for k in range(j + 1, len(lst)): 
       if lst[i] + lst[j] + lst[k] == n: 
        return True 
    return False  
+0

这个完美的作品!我不敢相信我没有想到嵌​​套循环。 –

+0

很高兴我能帮到你。 –

0

itertools.combinations使用和any

>>> any(sum(e)== 30 for e in combinations(range(1,22), 3)) 
True 
>>> any(sum(e)== 300 for e in combinations(range(1,22), 3)) 
False