此代码作为MIT programming course:
中指数复杂性的示例提供def genSubsets(L):
if len(L) == 0:
return [[]] #list of empty set
smaller = genSubsets(L[:-1]) #all subsets without last element
extra = L[-1:] #create a list of just the last element
new = []
for small in smaller:
new.append(small+extra) #for all smaller solutions, add one with last element
return smaller+new #combine those with last element and those without
如果我使用常规列表调用genSubsets,我会得到预期的答案(一组所有可能的子集)。
print(genSubsets([0,1,2]))
#prints - [[], [0], [1], [0, 1], [2], [0, 2], [1, 2], [0, 1, 2]]
但是,如果我尝试从循环内调用它(使用列表解析或使用子循环构造列表),然后调用genSubsets,则函数无法返回预期的答案。
for i in range(4):
L = []
for j in range(i):
L.append(j)
#print(L) # works as expected
print(genSubsets([L])) # produces lists of length two regardless of number input list length
我想在循环中调用函数,因为我很想知道返回的子集列表的大小(即长度)随着输入大小的增长而增长,并体验处理时间如何随输入而增加列表大小增加。
答案 0 :(得分:1)
你给它一个只有一个元素的列表,所以你当然只得到两个子集。将genSubsets([L])
更改为genSubsets(L)
。