python – 查找整数列表中添加到数字的所有数字

我在接受采访时被问到了这个问题.鉴于以下列表:

[1,2,5,7,3,10,13]

找到最多相加的数字5.

我的解决方案如下:

#sort the list:
l.sort()
result = ()
for i in range(len(l)):
    for j in range(i, len(l)):
         if l[i] + l[j] > 5:
             break
         elif l[i] + l[j] == 5:
             result += (l[i], l[j])

我提出的想法是对列表进行排序,然后循环并查看总和是否大于5.如果是,那么我可以停止循环.我觉得面试官对这个答案不满意.有人可以建议一个更好的一个供我将来参考吗?

最佳答案 这将返回总和为5的输入的powerset的所有元素:

>>> input = [1,2,5,7,3,10,13]
>>> import itertools
>>> def powerset(l):
...     return itertools.chain.from_iterable((itertools.combinations(l, i) for i in range(len(l)+1)))
...
>>> filter(lambda v: sum(v) == 5, powerset(input))
[(5,), (2, 3)]
点赞