Skip to main content
 首页 » 编程设计

python之打印字符串的幂集

2025年05月04日22think

我正在尝试编写 python 代码来打印 powerset一个字符串,但遇到了一些错误。这是我得到的:

def getperm (string): 
    perm = [] 
    if len(string) == 0: 
        perm.append("") 
        return perm 
    #if len(string) == 1: 
    #   perm.append(string) 
    #   perm.append("") 
    first = string[0] 
    print "first = " + str(first) 
    rem = string[1:len(string)] 
    print "rem = " + str(rem) 
    words = getperm(rem) 
    for word in words: 
        for i in range(len(word)): 
            temp = string[0:i] + first + string[i:len(string)] 
            print "temp = " + str(temp) 
            perm.append(temp) 
 
    return perm 
 
if __name__=="__main__": 
    a = "ab" 
    mag  = getperm(a) 
    print mag 

我的预期输出是:

['', 'a', 'b', 'ab'] 

我的实际输出是:

[] 

谁能帮我弄清楚这是怎么回事?这是 python 的一些细微差别,还是我的代码中存在错误?我认为我的代码应该没问题——我要结束第五版的 Cracking the coding interview

谢谢!

请您参考如下方法:

你想多了

这部分想做的太多了

for word in words: 
    for i in range(len(word)): 
        temp = string[0:i] + first + string[i:len(string)] 
        print "temp = " + str(temp) 
        perm.append(temp) 

看看它到底应该有多简单

def get_powerset (string): 
    perm = [] 
    if len(string) == 0: 
        perm.append("") 
        return perm 
    #if len(string) == 1: 
    #   perm.append(string) 
    #   perm.append("") 
    first = string[0] 
    print "first = " + str(first) 
    rem = string[1:len(string)] 
    print "rem = " + str(rem) 
    words = get_powerset(rem) 
    perm.extend(words) 
    for word in words: 
        perm.append(first+word) 
 
    return perm 
 
if __name__=="__main__": 
    a = "ab" 
    mag  = get_powerset(a) 
    print mag 

现在你应该能够通过一点点重构让代码看起来更漂亮