查找带有空字符串的方法

时间:2012-05-01 00:04:47

标签: python string substring

为了更好地理解它,我正在玩一个赋值函数。它的目的是找到字符串中最后一个子字符串。该函数应返回子字符串最后一次出现的开始位置,或者如果根本找不到子字符串,则必须返回-1。 “标准”方式如下:

def find_last(full, sub):
    start = -1
    while True:
        new = full.find(sub, start + 1)
        if new == -1:
            break
        else:
            start = new
    return start

我想尝试反向搜索,因为这似乎是更有效的方式。所以我尝试了这个:

def find_last(full, sub):
    start = -1
    while True:
        new = full.find(sub, start)
        if new == -1 and abs(start) <= len(full): #evals to False when beginning of string is reached
            start -= 1
        else:
            break
    return new

我们得到了一些需要通过的测试用例,我的反向函数除了一个以外都通过了:

print find_last('aaaa', 'a')
>>>3
print find_last('aaaaa', 'aa')
>>>3
print find_last('aaaa', 'b')
>>>-1
print find_last("111111111", "1")
>>>8
print find_last("222222222", "")
>>>8 #should be 9
print find_last("", "3")
>>>-1
print find_last("", "")
>>>0

有人能够解释为什么发现这种方式有负面索引吗?或者这只是我代码中的一些明显错误?

1 个答案:

答案 0 :(得分:3)

可以在任何位置找到空字符串。使用start初始化-1会使您的算法在倒数第二个位置开始搜索,而不是最后一个位置。

最后一个位置是字符串的最后一个字符之后,但是你开始在处看字符串的最后一个字符。