На этом шаге мы рассмотрим общие принципы прдставления и поиска ДНК.
В компьютерных программах гены обычно представляются в виде последовательности символов А, С, G и Т, где каждая буква означает нуклеотид, а комбинация трех нуклеотидов называется кодоном.
Рис.1. Нуклеотид представлен буквой А, С, G или Т. Кодон состоит из трех нуклеотидов, а ген - из нескольких кодонов
Кодон кодирует конкретную аминокислоту, которая вместе с другими аминокислотами может образовывать белок. Классическая задача в программах биоинформатики - найти в гене определенный кодон.
Мы можем представить нуклеотид в виде простого IntEnum с четырьмя вариантами значений.
from enum import IntEnum from typing import Tuple, List Nucleotide: IntEnum = IntEnum('Nucleotide', ('A', 'C', 'G', 'T'))
Nucleotide относится к типу IntEnum, а не просто Enum, поскольку IntEnum "бесплатно" обеспечивает операторы сравнения (<, >= и т. п.). Наличие этих операторов в типе данных необходимо для алгоритмов поиска, которые мы собираемся реализовать, чтобы иметь возможность сравнивать значения. Импорт Tuple и List из пакета typing нужен для того, чтобы помочь с аннотациями типа.
Кодоны могут быть определены как кортеж из трех нуклеотидов, а ген - как список кодонов.
Codon = Tuple[Nucleotide, Nucleotide, Nucleotide] # псевдоним типа для кодонов Gene = List[Codon] # псевдоним типа для генов
Как правило, в Интернете гены представлены в формате файлов, которые содержат одну гигантскую строку, содержащую все нуклеотиды в той последовательности, в которой они располагаются в гене. Мы определим такую строку для предполагаемого гена и назовем ее gene_str.
gene_str: str = "ACGTGGCTCTCTAACGTACGTACGTACGGGGTTTATATATACCCTAGGACTCCCTTT"
Нам также понадобится служебная функция для преобразования str в Gene.
def string_to_gene(s: str) -> Gene: gene: Gene = [] for i in range(0, len(s), 3): if (i + 2) >= len(s): # не выходить за пределы строки! return gene # инициализировать кодон из трех нуклеотидов codon: Codon = (Nucleotide[s[i]], Nucleotide[s[i + 1]], Nucleotide[s[i + 2]]) gene.append(codon) # добавить кодон в ген return gene
Функцию string_to_gene() можно использовать для преобразования gene_str в Gene.
my_gene: Gene = string_to_gene(gene_str)
На следующем шаге мы продолжим изучение этого вопроса.