Erstellen wir eine Funktion, die DNA in eine komplementäre Sequenz in Python umwandelt. Lassen Sie uns 4 Wege gehen und vergleichen, welcher schneller ist.
Wandle A in T, C in G, G in C und T in A um. Dann kehren Sie die Anordnung um. Die komplementäre Sequenz von ACGTTTTT ist AAAAAACGT.
R steht für A oder G. Y steht für C oder T. D ist anders als C (dh A, G oder T). Es gibt auch Groß- und Kleinschreibung.
Die Länge der DNA-Sequenz beträgt beispielsweise 10 Mb (10 Millionen Basen).
Erstellen Sie ein Wörterbuch, das die Ersetzungsmethode angibt.
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"}
Erster Weg: Erstellen Sie eine leere Liste (die Größe entspricht der Länge der DNA-Sequenz), um die komplementäre Sequenz zu speichern, lesen Sie die DNA-Sequenz von Anfang an und fügen Sie die komplementäre Sequenz zeichenweise ab dem Ende der Liste ein. Zum Schluss verbinden Sie sich mit 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)
Zweiter Weg: Machen Sie eine leere Liste. Lesen Sie die DNA-Sequenzen einzeln von vorne und fügen Sie die komplementären Basen mit insert () an den Anfang der Liste.
def comp2(dna):
l = len(dna)
c = []
for i in dna:
c.insert(0,(compDic[i]))
return ''.join(c)
Dritter Weg: Machen Sie eine leere Liste. Lesen Sie die DNA-Sequenzen einzeln von hinten und fügen Sie die komplementären Basen mit append () am Ende der Liste hinzu.
def comp3(dna):
l = len(dna)
c = []
for i in range(l):
c.append(compDic[dna[l-i-1]])
return ''.join(c)
Vierter Weg: Machen Sie eine leere Zeichenfolge. Lesen Sie die DNA-Sequenzen einzeln von hinten ab und fügen Sie die komplementären Basen zum String hinzu.
def comp4(dna):
l = len(dna)
str = ""
for i in range(l):
str += compDic[dna[l-i-1]]
return str
Ich las eine DNA-Sequenz von ungefähr 5 Millionen Basen aus einer Datei und machte sie zu einem komplementären Strang mit den obigen vier Funktionen. Code gehört zu @ fantasm21. Vielen Dank für die Verwendung.
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]")
Es wurde wie folgt. comp2 endete nicht.
elapsed_time:1.2188289165496826[sec]#comp1()
elapsed_time:1.3529019355773926[sec]#comp3()
elapsed_time:1.5209426879882812[sec]#comp4()
Es schien schnell zu sein, im Voraus eine leere Liste der erforderlichen Größe zu erstellen und die ergänzende Reihenfolge hier einzufügen. Nun, diesmal kann es gut sein. Wenn jemand einen schnelleren Weg kennt, würde ich es begrüßen, wenn Sie mich unterrichten könnten.
Recommended Posts