我是python的新手,并且以递归方式思考非常糟糕.这段代码给了我一个IndexError:字符串索引超出范围.我不知道如何纠正它.
def get_permutations(sequence):
def permutationhelp(sequence,chosen):
if sequence=="":
print(chosen)
else:
for i in range(len(sequence)):
c= sequence[i]
chosen +=c
sequence=sequence[i+1:]
permutationhelp(sequence,chosen)
sequence=c+sequence
chosen=chosen[:-1]
def permutation(sequence):
permutationhelp(sequence,"")
return permutation(sequence)
例:
get_permutations('abc')
['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
Traceback是这样的:
Traceback (most recent call last):
File "soRecursivePermutations.py", line 25, in
get_permutations('abc')
File "soRecursivePermutations.py", line 23, in get_permutations
return permutation(sequence)
File "soRecursivePermutations.py", line 20, in permutation
permutationhelp(sequence,"")
File "soRecursivePermutations.py", line 12, in permutationhelp
c= sequence[i]
IndexError: string index out of range
解决方法:
您的Traceback的原因在于:
sequence=sequence[i+1:]
permutationhelp(sequence,chosen)
sequence=c+sequence
第一行只留下字符串末尾的序列.并且第三行只将一个字符添加回序列,因此当您通过循环时序列会变短.
但是,这可能是您正在寻找的程序:
# https://stackoverflow.com/a/53088155/4834
def remove_at(i, s):
return s[:i] + s[i + 1:]
def permutationhelp(sequence, chosen, collect):
if sequence == "":
collect.append(chosen)
else:
for i,c in enumerate(sequence):
permutationhelp(remove_at(i, sequence), chosen + c, collect)
def get_permutations(sequence):
collect = []
permutationhelp(sequence, "", collect)
return collect
print(get_permutations('abc'))
输出:
['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
标签:python,recursion,string,index-error