Рубрики
Без рубрики

Python |. Проблема хэмминга

██. █ █ █ █╗░██. █ ╗░░██. ╗░███. █ █╗░ ██╔══█. █╗██. █ █╗░██║███══██╗ ██║░░██║██. ╔█. █╗██║████████ ██║░░██║███████║███══█ … Теги с Python, начинающими, вызов, CodeNewie.

██. █ █ █ █╗░██. █ ╗░░██. ╗░███. █ █╗░ ██╔══█. █╗██. █ █╗░██║███══██╗ ██║░░██║██. ╔█. █╗██║████████ ██║░░██║███████║███╔══██║ ██████╔╝███. ╚███║██║░░██║ ╚═════╝░╚═╝░░╚══╝╚═╝░░╚═╝.

Всем привет. В этом посте я собираюсь рассказать вам о проблеме Hamming (простой) и моего решения для него. Если вы не лучше, чтобы покинуть этот учебник, потому что это может быть скучно и бесполезно для вас! Но если вы новичок, нести со мной, потому что это была такая прохладная проблема для меня.

Проблема: Рассчитайте расстояние гамма между двумя нитями ДНК.

Ваше тело состоит из клеток, которые содержат ДНК. Эти клетки регулярно изнашиваются и нуждаются в замене, которые они достигают, разделив на дочерние клетки. На самом деле средний человеческий орган переживает около 10 квадриллионных клеточных подразделений в течение жизни!

Когда клетки делятся, их ДНК повторяется тоже. Иногда во время этого процесса ошибки случаются и одинокие кусочки ДНК кодируются с неправильной информацией. Если мы сравним две пряди ДНК и посчитаем различия между ними, мы можем видеть, сколько ошибок произошло. Это известно как «расстояние хэмминга».

Мы читаем ДНК, используя буквы C, A, G и T. Два цепей могут выглядеть так:

    GAGCCTACTAACGGGAT
    CATCGTAATGACGGCCT
    ^ ^ ^  ^ ^    ^^

У них есть 7 различий, и, следовательно, расстояние Hamming составляет 7.

Расстояние гамминга полезна для многих вещей в науке, а не просто биологии, поэтому это хорошая фраза, чтобы быть знакомой с ❤

Итак, прежде всего, я определил функцию и использовал Если Заявление, чтобы убедиться, если Длина двух утверждений равны или не так:

def distance(strand_a, strand_b):

    if len(strand_a) == len(strand_b):
        first_strand = [letter for letter in strand_a]
        second_strand = [letter for letter in strand_b]
    else:
        raise ValueError("The length of Sequences are not equal")

Но я мог бы написать этот кусок кода более простой, вы можете спросить, как? нравится:

def distance(strand_a, strand_b):
    if len(strand_a) != len(strand_b):
        raise ValueError("Length of two sequences most be the same")

Как вы можете видеть вместо написания 6-7 строк кода (первое решение) Я написал вторую функцию всего за 3 строки кода!

Итак, давайте посмотрим, что мы можем сделать для следующей части кода … Нам нужно сопрянуть каждый итератор вместе с zip () Функция! нравится:

diff = zip(first_strand, second_strand)

После этого я создал пустой список с двумя целями:

  • Положите различия в списке
  • Использование Лен () функция, чтобы получить длину различий
count = []

Если для цикла мы смотрим в наших кортежах, чтобы увидеть, если сопряженные итераторы такие же или нет, и добавьте различия в пустой список, который считается = [] И используя Len (счетчик), чтобы получить длину различий от подсчета и возврата Len (счетчик)!

нравится:

for x, y in diff:
        if x != y:
            count.append(x)  
return len(count)

Так что полное решение было бы таким:

def distance(strand_a, strand_b):
    if len(strand_a) != len(strand_b):
        raise ValueError("Length of two sequences most be the same")

    count = []
    zip_a_b= zip(strand_a, strand_b)

    for x, y in zip_a_b:
        if x != y:
            count.append(x)
    return len(count)

Редактировать: Мой друг Джереми Грифски предложил более эффективный способ с меньшим количеством кода:

Это странно создавать и выбросить список только для его длины, Джереми Грифски сказал! Ведь он комментирует свое удивительное решение для улучшения нашего кода, так вот оно: Вместо:

   count = []
    zip_a_b= zip(strand_a, strand_b)

    for x, y in zip_a_b:
        if x != y:
            count.append(x)
    return len(count)

Мы используем Генератор-выражения :

count = sum(1 for x, y in zip(strand_a, strand_b) if x != y)
return count

Если вы хотите узнать больше о Понимание списка или генератор-выражения Я нашел это Ссылка Полезно понять эти две концепции.

Наконец, если вы думаете, что смогу написать очиститель и более читаемый просто дайте мне знать и оставить комментарий ниже. TNX для чтения моего поста. И тратить вам время со мной.

Продолжай двигаться вперед ツ

Код с 💛.

🅑🅐🅝🅙🅘.

Оригинал: “https://dev.to/banji220/python-hamming-problem-5591”