Code Python qui complète les séquences d'ADN Quelle méthode est la plus rapide?

introduction

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.

Pour en faire une chaîne complémentaire

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.

Il y a d'autres que ACGT

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).

dictionnaire

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"}

Essayez de faire divers

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

Essayez de mesurer le temps qu'il faut

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]")

résultat

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()

À la fin

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

Code Python qui complète les séquences d'ADN Quelle méthode est la plus rapide?
Qu'est-ce qui est le plus rapide, le mélange Python ou l'échantillon?
[Python] pandas Code susceptible d'être réutilisé
Etrange message d'erreur Python —— Ce code est-il vraiment exécuté?
Le cycle de publication de Python est plus rapide!