循环与递归函数的组合

时间:2014-09-12 03:11:22

标签: python

拥有以下代码:

def choose_sets(lst,k):
 if k == 0:
      return [[]]
 if len(lst) == k:
      return [lst]
 else:
      return choose_sets(lst[1:],k)+[[lst[0]]+i for i in choose_sets(lst[1:],k-1)] 

i for i in choose_sets(lst[1:],k-1)如何运作?有可能放弃循环而不是写这个吗?

+[[lst[0]]+choose_sets(lst[1:],k-1)]

此函数返回包含长度为K的所有不同列表的列表,这些列表可以从原始列表的成员中创建(订单不重要)

1 个答案:

答案 0 :(得分:1)

i for i in choose_sets(lst[1:],k-1)

产生长度为k-1且不包含lst [0]的所有集合。换句话说,我们得到了一个列表,其元素是长度为k-1的列表。将lst [0]添加到每个中,我们得到了包含lst [0]的所有K长度集。

choose_sets(lst[1:],k),它产生所有不包含lst [0]的K长度集,我们得到了所有 K长度集。

Is it possible to give up on the loop and instead to write this?

没有。 +[[lst[0]]+choose_sets(lst[1:],k-1)]产生一个列表,其第一个元素的长度为1,所有其他元素的长度为k-1,这与我们的预期完全相同。