Créons une fonction qui convertit l'ADN en une séquence complémentaire avec python. Faisons 4 façons et comparons laquelle est la plus rapide.
Convertissez A en T, C en G, G en C et T en A. Puis inversez la disposition. La séquence complémentaire d'ACGTTTTT est AAAAAACGT.
R signifie A ou G. Y signifie C ou T. D est autre que C (c'est-à-dire A, G ou T). Il existe également des majuscules et des minuscules.
La longueur de la séquence d'ADN est par exemple de 10 Mb (10 millions de bases).
Créez un dictionnaire qui spécifie la méthode de remplacement.
compDic = {"R":"Y","M":"K","W":"W","S":"S","Y":"R","K":"M","H":"D","B":"V","D":"H","V":"B","N":"N","A":"T","C":"G","G":"C","T":"A","r":"y","m":"k","w":"w","s":"s","y":"r","k":"m","h":"d","b":"v","d":"h","v":"b","n":"n","a":"t","c":"g","g":"c","t":"a"}
Première manière: Faites une liste vide (la taille est la même que la longueur de la séquence d'ADN) pour stocker la séquence complémentaire, lisez la séquence d'ADN depuis le début et insérez la séquence complémentaire un caractère à la fois à partir de la fin de la liste. Enfin, connectez-vous avec join ().
def comp1(dna):
l = len(dna)
c = ["" for num in range(l)]
index = l-1
for i in dna:
c[index] = compDic[i]
index -= 1
return ''.join(c)
Deuxième manière: Faites une liste vide. Lisez la séquence d'ADN une par une de l'avant et ajoutez la base complémentaire en haut de la liste avec insert ().
def comp2(dna):
l = len(dna)
c = []
for i in dna:
c.insert(0,(compDic[i]))
return ''.join(c)
Troisième voie: Faites une liste vide. Lisez les séquences d'ADN une par une à l'arrière et ajoutez les bases complémentaires à la fin de la liste avec append ().
def comp3(dna):
l = len(dna)
c = []
for i in range(l):
c.append(compDic[dna[l-i-1]])
return ''.join(c)
Quatrième voie: Créez une chaîne vide. Lisez les séquences d'ADN une par une à l'arrière et ajoutez les bases complémentaires à la chaîne.
def comp4(dna):
l = len(dna)
str = ""
for i in range(l):
str += compDic[dna[l-i-1]]
return str
J'ai lu une séquence d'ADN d'environ 5 millions de bases à partir d'un fichier et en ai fait un brin complémentaire avec les quatre fonctions ci-dessus. Code appartient à @ fantm21. Merci de l'utiliser.
start = time.time()
comp1(sequence)
elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
start = time.time()
comp2(sequence)
elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
start = time.time()
comp3(sequence)
elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
start = time.time()
comp4(sequence)
elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
C'est devenu comme suit. comp2 ne s'est pas terminé.
elapsed_time:1.2188289165496826[sec]#comp1()
elapsed_time:1.3529019355773926[sec]#comp3()
elapsed_time:1.5209426879882812[sec]#comp4()
Il a semblé rapide de faire une liste vide de la taille requise à l'avance et de mettre la séquence complémentaire ici. Eh bien, cette fois peut être bonne. Si quelqu'un connaît un moyen plus rapide, j'apprécierais que vous puissiez m'apprendre.
Recommended Posts