我正在编写一个程序来返回一组数字子集。
例如:list = [1,2,3]
我想要的函数将返回[[], [1], [2], [2,1], [3], [3,1], [3,2], [3,2,1]]
但是,它返回[[], [1], [2], [3]]
这是我的代码
# Write a powerSet function
def powerSet(list):
if len(list) == 0:
return [[]];
else:
temp = list.pop()
return powerSet(list) + [[temp] + x for x in powerSet(list)];
list = [1,2,3];
print(powerSet(list));
答案 0 :(得分:2)
问题是你改变了list
对象,所以最后一行中的两个powerSet
将不会收到相同的列表(例如,在第一个调用中,第一个powerSet
}将获得[1,2]
但第二个将获得[1]
)。
解决方法是在传递时复制list
:
powerSet(list[:]) + [[temp] + x for x in powerSet(list[:])]
答案 1 :(得分:1)
“子集”
有一个内置包import itertools
def subset(x):
all_list = []
for i in range(len(x)+1):
all_list+=list(itertools.combinations(x,i))
return all_list
print subset([1,2,3])
[output>>>] [(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]