查找主字符串中子字符串的第一个字母的索引

时间:2014-02-14 22:49:52

标签: python

我试图在主字符串中找到子字符串的第一个字母的索引。该函数的行为与python的find方法完全相同。我创建了一个find_chr函数,它给出了字符串中字符的索引,我使用find_chr来获取子字符串的索引。

def find_str(s,x):
    i=0
    if x in s:
        return find_chr(s,x[i])
    else:
        return -1

我的问题是,当我使用字符串“IS GOING GOING”和子串为“ING”时,我得到第一个“I”的索引,当我期待“I”的索引时ING”。我将非常感谢有关更改函数以获取子字符串第一个字母的正确索引的任何输入。

4 个答案:

答案 0 :(得分:1)

find_str中,您拨打find_chr(s,x[i])。这仅使用find_chr(子字符串的第i部分)调用x[i]

这应该可以解决您的问题

def find_chr(s,char):
    i=0
    step = len(char)
    for j in range(len(s)+1):
        ch = s[j:j+step]
        if ch==char:
            return (i)
            break
        i+=1
    return -1

def find_str(s,x):
    i=0
    if x in s:
        return find_chr(s,x)
    else:
        return -1

答案 1 :(得分:1)

您没有遍历字符,只检查i == 0(即s中的第一个字符)。您需要对字符串应用“窗口”,连续检查len(s)个字符:

def find_str(s, x):
    if x in s: # is x present?
        for i in range(len(s)): # work through string indices
            if s[i:i+len(x)] == x: # does x start at current index?
                return i
    return -1

答案 2 :(得分:0)

查找字符串中索引函数的使用。然后,您将很乐意用大约1行替换所有代码。

由于以下评论而提供答案。但是说真的,如果要学习python,那么了解一个对象的可用方法是一个很好的练习。

>>> 'is going going'.index('ing')
5

或更一般地

>>> fullstring.index(substring)

这应该被标记为正确答案,因为它是最简单和最明显正确的。提供的算法的复杂性对于这个问题来说太高了。

如果子字符串不在fullstring中,则会引发ValueError异常。因此,如果您需要一个函数,那么它应该从try块返回索引,或者从except块返回-1(或None)。

答案 3 :(得分:0)

这可以解决您的问题:

def find_str(s, x):
    i = 0
    while i < len(s):
        if s[i:i + len(x)] == x:
            return i
        else:
            i += 1
print find_str('IS GOING GOING', 'ING')