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.()???
答案 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
循环自动增加i
和r
。
然后修改你的代码:
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