Wie kodiere ich meine Bindestrich-Fasta-Formatzeichenfolge, um alle aufeinanderfolgenden Nukleotide und Bindestriche zu gruppieren, und kodiere sie als Lauflänge .
Betrachte meine Sequenz als "ATGC ---- CGCTA ----- G ---". Die Zeichenfolge hat eine Folge von Nukleotid gefolgt von einer Folge von Bindestrichen. Ich versuche, alle aufeinanderfolgenden Nucleotide als Buchstaben M
und aufeinanderfolgende Bindestriche als Buchstaben D
zu gruppieren und sie mit der Größe der Subsequenz zu versehen.
Das Endergebnis dieser Codierung sollte 4M4D5M5D1M3D
sein.
Die folgende Grafik erklärt es weiter
%Vor% Wenn ich Counter
oder list.count()
verwende, bekomme ich "M":10 "D":12
:
Dieses Problem ist ideal für itertools.groupby
Implementierung
%Vor%Ausgabe '4M4D5M5D1M3D'
Erläuterung
Bemerkenswert ist hier die Schlüsselfunktion. Gruppiere die Sequenz basierend darauf, ob sie ein Alphabet ist oder nicht. Sobald dies erledigt ist, sollte es einfach sein, die Größe jeder Gruppe zu zählen und den Typ der Gruppe aus dem Schlüsselelement herauszufinden.
Eine Erläuterung des Codes
'DM'[k]
: Dies ist nur eine nette Möglichkeit, "M" if k == True else "D"
darzustellen
len(list(g))
: Bestimmt die Größe jeder Gruppe. Alternativ könnte es als sum(1 for e in g)
geschrieben worden sein
'{}{}'.format
: String-Formatierung zum Erstellen einer Verkettung der aufeinanderfolgenden Häufigkeit und des Typs ''.join(
: Zum Verknüpfen der Listenelemente als String-Sequenz. Tags und Links python python-2.7 collections counter