生成n元素集的子集;功能不返回任何东西

时间:2013-11-03 15:45:54

标签: python set combinations ipython subset

def nast(L):
    i=len(L)-1
    while L != [1 for i in range(len(L))]:
        if L[i]==0:
            L[i]=1
            break
        i=i-1
    for j in range(i+1,len(L)):
        L[j]=0
    return L

def extr(dss,bb):
    for i in list(dss.keys()):
        if bb[i]==0:
            dss.pop(i)
    w=list(dss.values())
    return w

def GenSet(ss):
    L1=[0 for i in range(len(ss))]
    w=[()]
    while L1 != [1 for i in range(len(ss))]:
        dss=dict(zip([i for i in range(len(ss))],list(ss)))
        tL1=tuple(nast(L1))
        temp=extr(dss,tL1)
        temp1=tuple(temp)
        w.append(temp1)
    ww= [set(x) for x in w]
    return ww, len(ww)

我希望此代码生成n元素集的子集。不幸的是, GenSet()既不返回值,也不返回错误;它崩溃了Ipython的shell。

2 个答案:

答案 0 :(得分:0)

陷阱:

i=len(L)-1
while L != [1 for i in range(len(L))]:

列表推导中出现的i将覆盖另一个。

答案 1 :(得分:0)

我还没有读过您的代码,但您是否考虑过使用itertools?

以下代码段将生成大小为n的所有子集:

import itertools
def subsets(bigset,n):
    return itertools.combinations(bigset, n)

然后你可以简单地将结果加在一起。

相关问题