拥有以下代码:
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的所有不同列表的列表,这些列表可以从原始列表的成员中创建(订单不重要)
答案 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,这与我们的预期完全相同。