我使用Python在Power Set中进行递归

时间:2017-02-08 04:49:08

标签: python

我正在编写一个程序来返回一组数字子集。 例如: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));

2 个答案:

答案 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)]