Найдите конкретную группу из 3 букв аминокислот в последовательности. Если хотя бы одна из них находится на этом месте, напечатайте 1, если нет – напечатайте 0. Печать под именами.

Вопрос или проблема

У меня есть 3 блока последовательностей, если я смотрю на позицию 234, если в этой позиции есть V, I, E, напечатайте 1, если нет — напечатайте 0. Вывод будет содержать названия аминокислот и либо 1, либо 0 под каждым названием. В этом случае каждая аминокислота будет иметь три 1 или 0 под собой. Например, вывод будет выглядеть так:

Валин   Изолейцин  Глутаминовая кислота
0       0           0
1       0           0
0       1           0        

Код дает правильные ответы, но вывод будет вертикальной линией из 1 и 0. Любая помощь будет оценена.

v_list = []
i_list = []
e_list = []
amino_list="Валин",'Изолейцин' ,'Глутаминовая кислота'
content = fasta.read()
print('Валин'+'\t'+'Изолейцин'+'\t'+ 'Глутаминовая кислота'+'\n')
for line in content.split(">"):
    if re.search(r"фактор роста фибробластов 1 изоформа", line):
        sequence = re.sub('NP.*]', '', line)
        amino = sequence[4]
        if amino in ['V']:
            v_list.append(1)
        else:
            v_list.append(0)
        if amino in ['I']:
            i_list.append(1)
        else:
            i_list.append(0)
        if amino in ['E']:
            e_list.append(1)
        else:
            e_list.append(0)

for row in v_list:
    print row

Ответ или решение

Чтобы решить задачу, вам необходимо извлечь аминокислоты из последовательностей и определить, соответствует ли аминокислота в позиции 234 одной из трех заданных — В (валин), I (изолейцин) или E (глутаминовая кислота). Затем, вам нужно форматировать вывод таким образом, чтобы он был читаемым и структурированным, как показано в примере.

Ниже приведен улучшенный и детализированный код, который решает вашу задачу. Он объединяет извлечение аминокислот и форматированный вывод в единую программу:

import re

# Списки для хранения результатов по каждой аминокислоте
v_list = []
i_list = []
e_list = []

# Названия аминокислот
amino_list = ["Valine", "Isoleucine", "Glutamic Acid"]

# Открываем файл с последовательностями (например, в формате fasta)
with open('sequences.fasta', 'r') as fasta:
    content = fasta.read()

# Печатаем заголовки для вывода
print('\t'.join(amino_list))

# Обрабатываем каждую последовательность
for line in content.split(">"):
    if re.search(r"fibroblast growth factor receptor 1 isoform", line):
        sequence = re.sub('NP.*]', '', line).strip()

        # Проверяем, достаточно ли длинная последовательность
        if len(sequence) >= 234:
            amino = sequence[233]  # Доступ к 234-й позиции (индекс 233)

            v_list.append(1 if amino == 'V' else 0)
            i_list.append(1 if amino == 'I' else 0)
            e_list.append(1 if amino == 'E' else 0)

# Печатаем результаты в соответствующем формате
for v, i, e in zip(v_list, i_list, e_list):
    print(f"{v}\t{i}\t{e}")

Объяснение кода:

  1. Импорт необходимых модулей: Используется модуль re для регулярных выражений, что позволяет эффективно искать необходимые строки.
  2. Инициализация списков: Созданные списки v_list, i_list, и e_list будут хранить значения 1 или 0 для каждой аминокислоты.
  3. Чтение и обработка файла: Читаем содержимое файла и разделяем его на блоки. В поле для поиска используется строка fibroblast growth factor receptor 1 isoform, чтобы идентифицировать нужные последовательности.
  4. Проверка длины последовательности: Перед тем как извлечь аминокислоту из позиции 234, убедитесь, что длина последовательности достаточна.
  5. Форматирование вывода: Используется метод zip, чтобы объединить значения списков и вывести их в виде упорядоченного табличного формата.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...