打印字符串的powerset

2024-10-01 17:40:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写python代码来打印字符串的powerset,但是遇到了一些bug。我得到的是:

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

我的预期产出是:

^{pr2}$

我的实际产出是:

[]

有人能帮我弄清楚发生了什么事吗?这是python的一些细微差别,还是我的代码中有一个bug?我想我的代码应该没问题——我要停止第五版的破解编码面试

谢谢你!在


Tags: 代码stringlenreturniftempbugfirst
3条回答

有一种排列方法:

>>> import itertools
>>> chars = "ABCD"
>>> perms = list(itertools.permutations(chars))
>>> print(perms)
[('A', 'B', 'C'),
 ('A', 'C', 'B'),
 ('B', 'A', 'C'),
 ('B', 'C', 'A'),
 ('C', 'A', 'B'),
 ('C', 'B', 'A')]

这是你想要的吗?在

import itertools as it

def func(s):
    for i in range(len(s)+1):
        for combo in it.combinations(s,i):
            yield "".join(combo)

print list(func("abc"))

你想得太多了

这一部分太过分了

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)

看看它有多简单

^{pr2}$

现在,您应该能够通过一点重构使代码看起来更好

相关问题 更多 >

    热门问题