为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

萧十郎 2021-12-08 16:31:05
有人告诉我要编写一个程序来查找字符串中子字符串的最后位置。它似乎在输出错误信息,我不确定我哪里出错了。任何人都可以帮忙吗?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_positionprint(find_last('aaaa', 'a')) # returns 0, but the last position is 3
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

每次调用时,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


查看完整回答
反对 回复 2021-12-08
?
catspeake

TA贡献1111条经验 获得超0个赞

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


查看完整回答
反对 回复 2021-12-08
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

尝试(从右向左扫描)


def find_last(s, c):

    for x in range(len(s)-1, 0, -1):

        if s[x] == c:

            return x

    return -1


查看完整回答
反对 回复 2021-12-08
  • 3 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信