如何使函数返回第一个字符串中出现的第二个字符串中的字符索引列表?

时间:2016-10-24 18:03:42

标签: python

def get_indices_from_the_second_string(string1, string2):
    '''(str, str) -> list of int
    >>> get_indices_from_the_second_string('AGTACACGTTAC', 'GAATTC')
    [1, 3, 5, 8, 9, 11]
    >>> get_indices_from_the_second_string('AGTACACGTTAC', 'GGATCC')
    [1, 7, 10]
    '''

    acc= []

    for i in range(0, len(string2)):
        for r in range(0, len(string1)):
            if len(acc) == len(string2):
                            break            
            if string1[r] == string2[i]:
                acc.append(r)
                i += 1
                r += 1
    return acc

    # the second example is wrong
    # how to make it not reversed only from left to right
    # maybe use find.()???

4 个答案:

答案 0 :(得分:2)

def get_indices_from_the_second_string(string1, string2):
    acc = []
    s2_counter = 0
    for i, letter in enumerate(string1):
        if letter == string2[s2_counter]:
            acc.append(i)
            s2_counter += 1
            if len(acc) == len(string2):
                break
    return acc

a = get_indices_from_the_second_string('GAATTCCGTTAC', 'GAATTC')

答案 1 :(得分:0)

删除行

            i += 1
            r += 1

for循环自动增加ir

然后修改你的代码:

lower = 0                             # from this index will be string1 searched

for i in range(0, len(string2)):
    for r in range(lower, len(string1)):
        if string1[r] == string2[i]:
            acc.append(r)
            lower = r + 1             # indexes from 0 to r are already used
            break
        elif r == len(string1) - 1:   # last index did not match
            return acc
return acc

答案 2 :(得分:0)

哦,我明白你在做什么。

def get_indices_from_the_second_string(string1, string2):
    acc = []
    string1_index = 0
    for char in string2:
        while string1[string1_index] != char:
            string1_index += 1
            if string1_index >= len(string1):
                return acc
        acc.append(string1_index)
        string1_index += 1
        if string1_index >= len(string1):
            return acc
    return acc

答案 3 :(得分:-1)

使用内置函数zip以及另一个内置enumerate

acc = []
for i, (a, b) in enumerate(zip(string1, string2)):
    if a==b:
        acc.append(i)
return acc