Я действительно хотел создать короткий ответ для этого, поэтому я пришел к этому!
Смотрите код, используемый здесь
s = 'AAGTCCTAG'
d = 'ACGT'
c = len(d)
while c <= len(s):
x,c = s[:c],c+1
if all(l in x for l in d):
print(x)
s,c = s[1:],len(d)
Этоработает следующим образом:
c
устанавливается на длину строки символов, которую мы гарантируем, чтобы существовать в строке (d = ACGT
) - Итерация цикла
while
по каждой возможной подстроке s
, так что c
меньше длины s
. - Это работает путем увеличения
c
на 1 при каждой итерации цикла while
. - Если каждый символ в нашей строке
d
(ACGT
) существует в подстроке,мы печатаем результат, сбрасываем c
к его значению по умолчанию и срезаем строку на 1 символ от начала. - Цикл продолжается до тех пор, пока строка
s
не станет короче d
Результат:
AAGTC
AGTC
GTCCTA
TCCTAG
CCTAG
CTAG
Чтобы получить вывод в списке вместо этого ( см. Используемый код здесь ):
s = 'AAGTCCTAG'
d = 'ACGT'
c,r = len(d),[]
while c <= len(s):
x,c = s[:c],c+1
if all(l in x for l in d):
r.append(x)
s,c = s[1:],len(d)
print(r)
Результат:
['AAGTC', 'AGTC', 'GTCCTA', 'TCCTAG', 'CCTAG', 'CTAG']