string.replace(c,'',1))和字符串[1:]之间的区别

时间:2017-03-09 20:11:06

标签: python recursion

所以我试图追踪一个递归函数,并且我在跟踪这个问题时遇到了困难:

我试图在排列上跟踪代码,但这让我感到困惑:

# 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:]之间的差异?无论如何你可以将替换更改为字符串切片吗?

1 个答案:

答案 0 :(得分:0)

str.replace(old, new[, count])old替换为new,可选择仅针对第一个count个实例

str[1:]从第二个索引处的字符返回一个str切片,直到最后一个索引,有效地返回整个字符串,除了它的第一个字符。

致电str[1:]时,实际发生的事情是您正在呼叫str.__getitem__(slice(1, None))