【发布时间】:2012-09-28 01:31:45
【问题描述】:
我正在尝试编写 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的一些细微差别,还是我的代码中有错误?我认为我的代码应该没问题——我要离开第五版的破解编码面试
谢谢!
【问题讨论】:
-
您正在寻找生成幂集,而不是排列。字符串
'ab'的唯一排列是'ab'和'ba'。 -
另外,你真的不应该将字符串命名为
string(这是内置模块的名称),我不确定你通过调用@987654329 想要完成什么@ 在已经是字符串的对象上(first、rem等)。 -
@Matt Ball 是的——好电话。即便如此,我不会生成“ab”或“ba”。你知道为什么吗?
-
@abarnert 非常正确——我将字符串重命名为不同的名称,并删除了多余的 str() 但仍然收到错误消息。知道为什么吗?
-
好吧,显然这些并没有导致您的问题;他们只是让阅读变得更难......同时,您应该使用代码的编辑版本更新问题。