【发布时间】:2018-11-12 21:19:56
【问题描述】:
我被要求定义一个递归函数,该函数接收一个列表,然后将该列表的值分配给另外两个列表以这样的方式,当你取这两个列表中的每一个的总和,您会得到两个彼此非常接近的结果。
示例:
如果我跑:
print(proximity_lists([5, 8, 8, 9, 17, 21, 24, 27, 31, 41]))
我得到了两个列表:
[31, 27, 21, 9, 8] #sum = 96
[41, 24, 17, 8, 5] #sum = 95
我就是这样做的,但是我无法理解如何在递归函数中返回两个列表。到目前为止,我对必须返回一个列表的条件感到满意。
这是我目前的代码:
def proximity_lists(lst, lst1 = [], lst2 = []):
"""
parameters : lst of type list;
returns : returns two lists such that the sum of the elements in the lst1
is in the proximity of the sum of the elements in the lst2
"""
if not lst:
if abs(sum(lst1)-sum(lst2)) in range(5):
return lst1, lst2
else:
return {Not sure what to put here} + proximity_lists(lst[1:])
就range() 而言,它可以接受任何参数,只要它是他们可以彼此接近的最接近的。我选择了 5,因为根据上面的示例输出,它们之间的差异是 1。
我需要补充一点,这必须在没有任何模块的帮助下完成。它是使用简单的函数完成的。
【问题讨论】:
-
列表总是偶数?子列表总是相同的大小?最小子列表大小?我的意思是 [8] 和 [8] 可能是最合适的。
-
没有指定这样的条件,所以我想只要两个列表的总和彼此最接近,什么都会发生。
-
对不起,请您问一个具体的问题。我了解您的示例以及对您的要求,但请说明您需要帮助的问题。
-
@trs 我发布了我的代码,以便了解如何获得该输出