我在一次采访中被问到这个问题。给定以下列表:
[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 的输入幂集中的所有元素:
>>> 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)]
关于python - 查找整数列表中所有加起来等于一个数字的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32319836/