ДНК с обратным комплементом

У меня есть это уравнение для обратного дополнения ДНК в питоне:

def complement(s): 
    basecomplement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 
    letters = list(s) 
    letters = [basecomplement[base] for base in letters] 
    return ''.join(letters)
def revcom(s):
    complement(s[::-1])
print("ACGTAAA")
print(complement("ACGTAAA"[::-1]))
print(revcom("ACGTAAA"))

однако строки:

print(complement("ACGTAAA"[::-1]))
print(revcom("ACGTAAA"))

не равны друг другу. только верхняя строка дает ответ. внизу просто печатается "NONE"

любая помощь, почему это?


person Michael Ridley    schedule 24.10.2013    source источник
comment
Бьюсь об заклад, он печатает None, а не "NONE". На самом деле это важное отличие. Помните, что при обращении за помощью в отладке важно сообщать об ошибке точно в момент ее возникновения.   -  person SethMMorton    schedule 24.10.2013


Ответы (4)


Вы забыли оператор return в revcom. Попробуй это:

def revcom(s):
    return complement(s[::-1])

Если вы явно не возвращаете значение из функции в Python, функция возвращает None.

person mdml    schedule 24.10.2013

Python3, включая весь алфавит IUPAC для нуклеотидов:

def revcomp(seq):
    return seq.translate(str.maketrans('ACGTacgtRYMKrymkVBHDvbhd', 'TGCAtgcaYRKMyrkmBVDHbvdh'))[::-1]

В Python2:

from string import maketrans

def revcomp(seq):
    return seq.translate(maketrans('ACGTacgtRYMKrymkVBHDvbhd', 'TGCAtgcaYRKMyrkmBVDHbvdh'))[::-1]
person corinna    schedule 12.07.2016

Симпатичный лайнер для обратной комплементарности последовательности ДНК:

revcompl = lambda x: ''.join([{'A':'T','C':'G','G':'C','T':'A'}[B] for B in x][::-1])
print revcompl("AGTCAGCAT")
person xApple    schedule 19.07.2014

Вам нужно return получить результат из revcom().

person Christian Ternus    schedule 24.10.2013