Вопрос или проблема
У меня есть 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}")
Объяснение кода:
- Импорт необходимых модулей: Используется модуль
re
для регулярных выражений, что позволяет эффективно искать необходимые строки. - Инициализация списков: Созданные списки
v_list
,i_list
, иe_list
будут хранить значения 1 или 0 для каждой аминокислоты. - Чтение и обработка файла: Читаем содержимое файла и разделяем его на блоки. В поле для поиска используется строка
fibroblast growth factor receptor 1 isoform
, чтобы идентифицировать нужные последовательности. - Проверка длины последовательности: Перед тем как извлечь аминокислоту из позиции 234, убедитесь, что длина последовательности достаточна.
- Форматирование вывода: Используется метод
zip
, чтобы объединить значения списков и вывести их в виде упорядоченного табличного формата.
Заключение
С помощью предложенного кода вы сможете динамически анализировать заданные последовательности, проверять аминокислоты и выводить результаты в заданном формате. Такой подход обеспечивает легкость в восприятии вывода и его точность.