Python:存储最早出现的字符索引,而不是最后一个

时间:2017-07-25 02:42:35

标签: string python-3.x

我正在编写一个函数,使用以下函数检查字符串中'a'和'b'之间的距离是否为3。对于输入字符串“Laura sobs”,'s'的值存储为1(最早出现'a')而不是4(最后一次出现'a')并且输出错误。我该如何解决这个问题?

def ABCheck(str): 
    for i in str:
        if i == 'a':
            s = str.index(i)
        elif i == 'b':
            t = str.index(i)
            # print (b)
    return (abs(s-t)==4)

2 个答案:

答案 0 :(得分:0)

您的代码似乎非常硬编码,只检查差异为3的实例,字母必须是'a'或'b'而不是从某处输入。

如果你是初学者试图建立一些东西,我认为这不是一个好习惯。但是,如果您非常确定这是您想要的(仅处理此特定情况的函数),那么无论如何:

def ABCheck(str): 
    s = -1
    t = -1
    for i in str:
        if i == 'a' and s == -1:
            s = str.index(i)
        elif i == 'b' and t == -1:
            t = str.index(i)
            # print (b)
    return (abs(s-t)==3)

只需初始化为-1并检查它。一旦他们的值第一次被覆盖,他们将不再更新。

编辑:

def ABCheck(string): 
    s = -1
    t = -1
    for i in string:
        if i == 'a' and s == -1:
            s = string.index(i)
        elif i == 'b' and t == -1:
            t = string.index(i)
            # print (b)
    return (abs(s-t)==4)

它不起作用,因为你的代码(我复制了)最初使用str是保留关键字。

答案 1 :(得分:0)

使用enumerate循环遍历字符串,同时保持索引。然后,当您找到' a'时,只需检查字符3是否位于' b'。

def abcheck(s):  # Don't use str, it's the name of a builtin
    for idx, c in enumerate(s[:-3]):  # No need to iterate over the last part
        if c == 'a' and s[idx+3] == 'b':
            return True
    return False