У меня есть две строки QTNNATTGYH (строка 1) и EEYAYAYEHYTF (строка 2). Я хочу определить, сколько подпоследовательностей этих строк состоят из пар букв в чередующейся последовательности в этих строках.
Например, в моих строках строка 1 не имеет таких подпоследовательностей. В строке 2 есть:
Итак, в этом случае я хочу вернуть словарь с длиной повторяющейся подпоследовательности и количеством совпадающих подпоследовательностей, поэтому для этих двух последовательностей будет возвращено следующее:
т.е. есть три подпоследовательности из трех альтернативных букв и две подпоследовательности из четырех альтернативных букв.
Я написал:
Код: Выделить всё
list_seq2 = ['QTNNATTGYH','EEYAYAYEHYTF']
alternate_dict = {}
for i in range(3,10):
alternate_dict[i] = 0 ##make the final dict of length of alt string to count
for each_num in alternate_dict: #go through dict
for seq in list_seq2: #go through seq list
print(seq)
substrings = [seq[i:i + each_num] for i in range(len(seq) - each_num + 1)] #break seq into substrings of a length
for each_substring in substrings:
print(each_substring)
print(len(each_substring))
print(len(set(list(each_substring)))) ##part where the logic is wrong
print('***')
По логике, если бы длина набора подстроки была на 1 меньше длины подстроки, в ней были бы повторяющиеся буквы, что в некоторых случаях работает для трехбуквенного случая. сценарии (например, ДА, длина последовательности — 3, длина набора букв — 2). Но это не работает в других трехбуквенных сценариях (например, YAA также будет иметь длину последовательности 3, а длину набора 2). Он также не масштабируется за пределы трехбуквенного сценария, я хочу перейти к проверке шаблонов подстрок длиной до 10.
Итак, если у кого-нибудь есть предложение по альтернативному коду, который работает для это, я был бы признателен.
Подробнее здесь:
https://stackoverflow.com/questions/788 ... n-a-string