Получил 'TypeError: строковые индексы должны быть целыми числами', сравнивающими белковые последовательности - PullRequest
0 голосов
/ 25 марта 2019

Как я могу вернуть список в алфавитном порядке?

У меня есть переводчик последовательностей и код на python, который читает и днк, и белковые последовательности.Код считывает последовательность ДНК и переводит ее в последовательность белка, считывает последовательность белка, сравнивает ее с транслированной последовательностью белка и распечатывает список последовательности белка, которая существует в прочитанной последовательности белка.Как я могу распечатать список белков, которые существуют в обоих из них?

def translate_codon(cod):
    """Translates a codon into an aminoacid using an internal dictionary with the standard genetic code."""
    tc = {"GCT":"A", "GCC":"A", "GCA":"A", "GCG":"A",
          "TGT":"C", "TGC":"C",
          "GAT":"D", "GAC":"D",
          "GAA":"E", "GAG":"E",
          "TTT":"F", "TTC":"F",
          "GGT":"G", "GGC":"G", "GGA":"G", "GGG":"G",
          "CAT":"H", "CAC":"H",
          "ATA":"I", "ATT":"I", "ATC":"I",
          "AAA":"K", "AAG":"K",
          "TTA":"L", "TTG":"L", "CTT":"L", "CTC":"L", "CTA":"L", "CTG":"L",
          "ATG":"M", "AAT":"N", "AAC":"N",
          "CCT":"P", "CCC":"P", "CCA":"P", "CCG":"P",
          "CAA":"Q", "CAG":"Q",
          "CGT":"R", "CGC":"R", "CGA":"R", "CGG":"R", "AGA":"R", "AGG":"R",
          "TCT":"S", "TCC":"S", "TCA":"S", "TCG":"S", "AGT":"S", "AGC":"S",
          "ACT":"T", "ACC":"T", "ACA":"T", "ACG":"T",
          "GTT":"V", "GTC":"V", "GTA":"V", "GTG":"V",
          "TGG":"W",
          "TAT":"Y", "TAC":"Y",
          "TAA":"_", "TAG":"_", "TGA":"_"}
    if cod in tc:
        return tc[cod]
    else:
        return '-1'


def seq_prot(dna_seq, ab):
    seqm = dna_seq.upper()
    prot = ab.upper()
    seq_aa = ''
    for pos in range(0, len(seqm)-2,3):
        cod = seqm[pos:pos+3]
        seq_aa += translate_codon(cod)
    for p in seq_aa:
        if p in prot:
            seq_aa[p] += 1
        else:
            seq_aa = p

    return seq_aa

dna_seq = "ACCCCTGTGACATACCTTTATGTTGCCTCGGCGGATCAGCCCGCGCCCC"
ab = 'TLYPAP'

print("The protein sequence are :",seq_prot(dna_seq, ab))

Последовательность белков: TYPP

1 Ответ

0 голосов
/ 25 марта 2019

Ваш код не работает, так как он обрабатывает seq_aa, как если бы он был str и dict.Давайте добавим фактический словарь для сбора ваших результатов:

def seq_prot(dna_seq, ab):
    sequence = dna_seq.upper()
    protein = ab.upper()
    matches = {}

    for position in range(0, len(sequence), 3):
        codon = sequence[position: position + 3]
        aa = translate_codon(codon)

        if aa in protein:
            if aa in matches:
                matches[aa] += 1
            else:
                matches[aa] = 1

    return matches

dna_seq = "ACCCCTGTGACATACCTTTATGTTGCCTCGGCGGATCAGCCCGCGCCCC"
ab = 'TLYPAP'

print("The protein sequence matches are :", seq_prot(dna_seq, ab))

ВЫХОД

The protein sequence matches are : {'T': 2, 'P': 3, 'Y': 2, 'L': 1, 'A': 3}

Из которого вы можете извлекать белки, используя .keys() для возвращенных dict.Если вы хотите, чтобы буквы умножались на значения, вы можете использовать умножение (*) в качестве оператора повторения.Однако любое чувство порядка потеряно - мы просто имеем дело с существованием .Если вы хотите сохранить порядок, мы должны поступить иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...