Seite 1 von 1
String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 10:26
von frcom
Hallo an Alle,
Mein Problem ist wahrscheinlich recht einfach zu lösen:
Ich möchte in meinem Programm eine Nukleotidsequenz eingeben und in der Art in triplets unterteilen :
input: 'ATCGTG...'
output: ['ATC', 'TCG', 'CGT', 'GTG']
gibt es da in der list() -function eine Möglichkeit das leicht umzusetzen oder muss ich den Inputstring in eine Liste umwandeln und dann in einer while- oder for-schleife immer 3 Positionen wieder zusammenfügen?
Code: Alles auswählen
neu = []
for i in range(len(list(input))-2):
codon = input[i]+[input[i+1]+input[i+2]
neu.append(codon)
Danke für eure Hilfe!
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 10:47
von Bolitho
Code: Alles auswählen
input = 'ATCGTGATC'
neu = []
for i in range(len(input)-2):
codon = input[i:i+3] # Stringkette[0:2] -> Stringkette[2:4] usw.
neu.append(codon)
print(neu)
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 10:52
von EyDu
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 10:53
von Sirius3
@Bolitho: die Überlappungen sind gewünscht. Du teilst den String in 3er-Päckchen.
@EyDu: bei Deiner zip-Lösung bekommst Du einen Iterator von Tuplen, für das gewünschte Ergebnis also:
Code: Alles auswählen
neu = [''.join(t) for t in zip(input, input[1:], input[2:])]
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 10:58
von Bolitho
Sirius3 hat geschrieben: Montag 14. Mai 2018, 10:53
@Bolitho: die Überlappungen sind gewünscht. Du teilst den String in 3er-Päckchen.
Danke, hatte die Aufgabe falsch gelesen/verstanden. Ist korrigiert oben.
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 11:18
von EyDu
Sirius3 hat geschrieben: Montag 14. Mai 2018, 10:53
@EyDu: bei Deiner zip-Lösung bekommst Du einen Iterator von Tuplen,
Eigentlich war ich nur zu faul ^^ In dem Fall könnte man auch einfach
schreiben. Aber ob das schöner ist als eine LC? ^^
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 11:54
von noisefloor
Hallo,
ich finde bei sowas eine Lösung mit `deque`auch immer schön:
Code: Alles auswählen
>>> from collections import deque
>>> data = 'ATCGTG'
>>> d = deque(maxlen=3)
>>> res = []
>>> for i in data:
... d.append(i)
... if len(d)==3:
... res.append(''.join(d))
...
>>> res
['ATC', 'TCG', 'CGT', 'GTG']
>>>
Gruß, noisefloor
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 16:26
von frcom
super, vielen Dank euch allen!
Bei mir hat sich nun die nächste Frage aufgetan:
Ich habe die entstandene Liste nun in einer Funktion nach dem Startcodon, bzw. dem string 'AUG' durchsucht und alle Triplets davor gelöscht. Das funktioniert auch prima, nur kenne ich ja nun den Start und brauche die Überlappungen nicht mehr. Sprich jeder 2. und 3. string in der Liste kann/soll gelöscht werden.
Habt ihr Tipps, wie ihr hier ansetzen würdet?
Danke schon mal,
frcom
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 17:07
von Sirius3
@frcom: dann willst Du eigentlich was ganz anderes und die ursprüngliche Lösung Bolitho war doch ganz richtig.
Code: Alles auswählen
start = input.find(STARTCODON)
codons = [input[i : i+3] for i in range(start, len(input), 3)]
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 21:37
von frcom
@sirius3: brauche ich nicht zum finden des Startcodons erst alle möglichen triplets? und ab dem Moment, ab dem ich die Position des Startcodons weiß nur noch in 3er schritten weiterführend?
und ansonsten brauche ich für andere Aufgaben, die das Programm erledigen soll (wie alignments erstellen etc.) sowieso alle möglichen Triplets...
gibts da die dann eine Möglichkeit oder muss ich je nachdem was ich nun genau mit der sequenz anstellen will unterschiedliche Funktionen durchlaufen?
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 21:58
von Sirius3
Das Durcharbeiten eines Python-Tutorials würde helfen, solche und weitere Fragen beantworten.
Re: String zu Liste convertieren
Verfasst: Montag 14. Mai 2018, 22:47
von kbr
@frcom: Das Startcodon könntest Du mit str.find ausfindig machen und dann mit der Zerlegung fortfahren. Python macht die Aufgabe einfach, automatisiert sie für Dich aber nicht. Mit den bisherigen Hinweisen müsstest Du das aber hinkriegen – grundlegende Pythonkenntnisse vorausgesetzt.
Re: String zu Liste convertieren
Verfasst: Dienstag 15. Mai 2018, 10:03
von frcom
Okay alles klar! Habe es hinbekommen...
Danke euch allen!