Ich lerne Julia, aber habe relativ wenig Programmiererfahrung außerhalb von R. Ich nehme dieses Problem direkt von rosalind.info und Sie können es here finden, wenn Sie ein bisschen mehr Details möchten.Wie finden Sie den ersten Index mehrerer 'Motive' in einer Sequenz?
Ich habe zwei Strings angegeben: ein Motiv und eine Sequenz, wobei das Motiv ein Teilstring der Sequenz ist und ich den Index der Anfangsposition des Teilstrings herausfinden soll, egal wie oft er in der Sequenz.
Zum Beispiel:
Sequenz: "GATATATGCATATACTT"
Motiv: "ATAT"
ATAT dreimal gefunden wird, einmal am Index beginnend 2, einmal an der Stelle 4 und einmal im Index 10. Dies setzt eine 1-basierte Indexierung voraus. So würde die endgültige Ausgabe sein:
Hier ist, was ich bisher:
f = open("motifs.txt")
stream = readlines(f)
sequence = chomp(stream[1])
motif = chomp(stream[2])
println("Sequence: $sequence")
println("Motif: $motif")
result = searchindex(sequence, motif)
println("$result")
close(f)
Mein Hauptproblem scheint zu sein, dass es keine searchindexall Option. Das aktuelle Skript gibt mir den ersten Index des ersten Mal, wenn das Motiv gefunden wird (Index 2), ich habe eine Vielzahl von for-Schleifen ausprobiert, die nicht zu viel Erfolg haben, also hoffe ich, dass jemand mir einen Einblick geben kann darauf.
Das hat super funktioniert. Sie lassen also den Suchindex im Wesentlichen bei verschiedenen Indizes beginnen, damit er nicht immer wieder zu Index 1 zurückkehrt? Dies ist sinnvoll. Vielen Dank! – System
@System, ja. Genau das tut es. Froh, dass es für dich funktioniert hat. – niczky12
Die Funktion kann einfacher und schneller gemacht werden, indem die 3-Argument-Form 'searchindex' verwendet wird, so dass kein Slicing benötigt wird. I.e. 'searchindex (sequenz, motiv, start_at)' Ein typisches Julia-Idiom wäre auch 'result == 0 && break'. Die while-Schleife sollte nur 'while true' sein, und es ist nicht notwendig,' result' vor der Schleife zu setzen. Das Inkrement kann 'start_at + = result + 1' sein. Ein stilistisches Problem hätte normalerweise nur 'find_indices' als letzte Zeile, oder' return found_indices', die zusätzlichen parens werden nicht benötigt. Trotzdem ist es eine lohnende Antwort. –