猿问

程序是不是应该按方式工作?

有人告诉我要编写一个程序来查找字符串中子字符串的最后位置。它似乎在输出错误信息,我不确定我哪里出错了。


任何人都可以帮忙吗?


def find_last(s, c):

    last_position = -1


    while s.find(c) != -1:

        last_position = s.find(c)

        s = s[last_position + len(c):]


    return last_position



print(find_last('aaaa', 'a')) # returns 0, but the last position is 3


萧十郎
浏览 183回答 3
3回答

繁华开满天机

每次调用时,s.find()您只使用上一次匹配后的子字符串。所以last_position不会是原始字符串中的位置,而是该子字符串中的位置。如果您使用更复杂的字符串,则更容易看到发生了什么,例如find_last('abcaxya34', 'a')第一次通过循环时s = 'abcaxya34',它a在 index 处找到0。然后它从字符串的开头删除该匹配项。第二次通过循环s = 'bcaxya34',它a在索引处找到3。然后它从字符串的开头删除该匹配项。第三次通过循环,s = 'xya34',它a在 index 处找到3。然后它从字符串的开头删除该匹配项。第四次通过循环,s = '34'。这次它没有找到a,所以循环结束。然后它返回上一次迭代的位置,即3。但这只是最后一个成功子字符串中的索引,而不是原始字符串中的索引。str.find() 允许您提供可选的起始索引,您可以使用它而不是每次都对字符串进行切片。def find_last(s, c):    last_position = 0    result = -1    while True:        next_position = s.find(c, last_position)        if next_position == -1:            break        result = next_position        last_position = next_position + len(c)    return result

catspeake

您可以使用rfind()获取最后一个字符的位置。

慕尼黑5688855

尝试(从右向左扫描)def find_last(s, c):    for x in range(len(s)-1, 0, -1):        if s[x] == c:            return x    return -1
随时随地看视频慕课网APP

相关分类

Python
我要回答