所以我试图追踪一个递归函数,并且我在跟踪这个问题时遇到了困难:
我试图在排列上跟踪代码,但这让我感到困惑:
# doesn't work
def permutations(string):
if len(string) == 1:
return string
recursive_perms = []
for c in string:
for perm in permutations(string[1:]):
recursive_perms.append(c+perm)
return set(recursive_perms)
# works
def permutations(string):
if len(string) == 1:
return string
recursive_perms = []
for c in string:
for perm in permutations(string.replace(c,'',1)):
recursive_perms.append(c+perm)
return set(recursive_perms)
我目前在跟踪递归方面很可怕,而且我不知道第一个和第二个函数之间的区别,但第二个函数首先起作用的并不是。不同之处在于替换。什么是替换和做字符串[1:]之间的差异?无论如何你可以将替换更改为字符串切片吗?
答案 0 :(得分:0)
str.replace(old, new[, count])
将old
替换为new
,可选择仅针对第一个count
个实例
str[1:]
从第二个索引处的字符返回一个str
切片,直到最后一个索引,有效地返回整个字符串,除了它的第一个字符。
致电str[1:]
时,实际发生的事情是您正在呼叫str.__getitem__(slice(1, None))