我应该编写两个完全相同的函数,但它们的实现是不同的。
该函数将正整数列表和正整数n作为输入,如果列表中的两个数字等于n,则返回True。否则,它返回False。
第一个函数应该使用嵌套的循环,我能够得到它。
第二个函数不应该使用嵌套循环。但是,您应该对列表进行排序,然后解决问题。
这是我对第二个功能的看法。
def pairs2(lst, n):
lst.sort()
if len(lst) == 2:
if lst[0] + lst[1] == n:
return True
else:
return False
elif len(lst) >= 3:
for i in range(len(lst) - 1):
if lst[0] + lst[i + 1] == n:
return True
lst.remove(lst[0])
pairs2(lst, n)
该功能一直有效,直到实现最后两行。在那之后,它不返回任何东西。我的功能出了什么问题?
另外,它们是否是我不使用递归的其他替代方案?我只是提出了使用递归,因为这是我得到的第一个想法。
答案 0 :(得分:1)
递归算法,在每个递归步骤中消除最大数字:
def pairs2(lst, n, s=False):
if len(lst) < 2: return False
if not s: lst = sorted(lst)
for item in lst:
if item + lst[-1] > n:
return pairs2(lst[:-1], n, True)
if item + lst[-1] == n:
print item, lst[-1]
return True
return False
s
参数指示列表是否已排序。
答案 1 :(得分:0)
def pairs2(lst, n):
[pair for pair in itertools.combinations(lst,2) if sum(pair) == n]
您可以使用蛮力方法使用itertools.combinations查找对,而不是使用递归。
详细了解itertools:https://docs.python.org/2/library/itertools.html