Python Подсчет последовательных символов в строке - PullRequest
0 голосов
/ 04 апреля 2020

Я работаю в PSET6 для CS50 на edx, это называется DNA https://cs50.harvard.edu/x/2020/psets/6/dna/

И видео, чтобы объяснить проблему в деталях: https://youtu.be/j84b_EgntcQ

Ниже приведен код, в котором мне нужна помощь с

. Я хочу посчитать, сколько раз следующий набор символов повторяется последовательно «AGAT C», «AATG», и «TAT C»

, что означает, что если «AGAT C» появился один раз, я игнорирую его, однако, если он повторяется спина к спине, поэтому я считаю их и т. д., затем возвращаю максимальное число, в которое он был посчитан

Вот текст, который вы можете редактировать для тестирования

этого кода, не дает необходимых результатов, поскольку счетчик группирует каждую букву, так что есть способ, которым я могу получить приведенный ниже результат

# code from https://www.journaldev.com/23666/python-string-find
def find_all_indexes(input_str, search_str):
    l1 = []
    length = len(input_str)
    index = 0
    while index < length:
        i = input_str.find(search_str, index)
        if i == -1:
            return l1
        l1.append(i)
        index = i + 1
    return l1

s = 'AAGAGATCAGATCAGATCAGATCAGGTGAGTTAAATAGAAGATCAGATCAGATCAGATCAGATCATAGGTTAAAAATGAATGAATGAATGAATGATTAAAGGAGATCAGATCAGATCAGATCTATCTATCTATCTATCAATGAATGAATGTATCTATCTATCAGAAAATGAATGAATGAAGAGTATATCTATCAATAGTTAAAGAGTAAGATATTGAATTGAAAATATTGTTGGGGAAAGGAGGGATAGAAGG'

print(find_all_indexes(s, 'AGATC'))

# printed values: [3, 8, 13, 18, 39, 44, 49, 54, 59, 102, 107, 112, 117]

, так что теперь я могу найти местоположение, однако я не знаю, как подсчитывать каждое из последовательных

, например

местоположения 3, 8, 13, 39, 44, 54 считаются 6

, затем местоположения 102, 107, 112 , 117 считаются 4

, поэтому наибольшее число составляет 6

, тогда мне нужно получить эти 6, пожалуйста, что является максимальным повторением этой строки

1 Ответ

0 голосов
/ 04 апреля 2020

Код основан на вашем примере, возможно, вам нужно его оптимизировать:

import re

def find_all_indexes(input_str, search_str):
    max_count = 0
    for group in re.findall(f"(?:{search_str})+", input_str):
        count = len(re.findall(f"(?:{search_str})", group))
        if count > max_count:
            max_count = count
    return max_count

s = 'AAGAGATCAGATCAGATCAGATCAGGTGAGTTAAATAGAAGATCAGATCAGATCAGATCAGATCATAGGTTAAAAATGAATGAATGAATGAATGATTAAAGGAGATCAGATCAGATCAGATCTATCTATCTATCTATCAATGAATGAATGTATCTATCTATCAGAAAATGAATGAATGAAGAGTATATCTATCAATAGTTAAAGAGTAAGATATTGAATTGAAAATATTGTTGGGGAAAGGAGGGATAGAAGG'

print(find_all_indexes(s, 'AGATC'))

Посмотрите еще раз. Вы можете проверить документацию здесь: https://docs.python.org/3/library/re.html#re .findall

...