Python String Processing Map und Lambda

Ich werde erklären, wie man Map und Lambda in Python mit der Fastq-Datei verwendet.

Die folgende Testdatei ist eine Datei des Analyseergebnisses des DNA-Sequenzers namens Fastq-Datei, die in der Bioinformatik bekannt ist. Die @ -Zeile ist Header, die nächste Zeile ist die DNA-Basensequenz, die 3. Zeile ist die 4. Zeile mit + dazwischen. Ist der Qualitätsbewertungswert für jedes Zeichen der DNA-Basensequenz in der zweiten Zeile, und der Wert, der durch Addieren von 33 zum Qualitätsbewertungswert erhalten wird, ist die mit ASCII-Zeichen konvertierte Zahl.

test.fastq


@test1
GAGCACACGTCTNNANNCNAGTCANNANNNANNNNNNNNNNANNCNNNNNNTNNNNNNNNANNNNTGTCCATTGCNNNCACATCATTGTTTACTTGCGCNT
+
;<<:?@9<?############################################################################################

Ich möchte den Qualitätsbewertungswert auf den ursprünglichen Wert korrigieren. Also habe ich versucht, in einem Chaos mit Python zu schreiben, aber ich bin auf eine sehr praktische Kombination aus Karte und Lambda gestoßen, also werde ich es aufschreiben. Die Umgebung ist übrigens python2. Hinweis: Unterschiede in der Verwendung von Funktionen höherer Ordnung zwischen Python-Versionen.

Um beispielsweise einen Qualitätsbewertungswert von A in eine Zahl umzuwandeln, verwendet Python eine integrierte Funktion namens ** ord (gegenüber chr) **, um den ASCII-Code in eine Zahl umzuwandeln, und subtrahiert dann 33, um das Original zu erhalten. Wird der Wert von sein.

>  python -c 'print ord("A")-33'
32

Verwenden Sie die for-Anweisung, um alle 101 Zeichen in der Qualitätswertzeile der Testdatei zu konvertieren.

convert_asci.py


asci_string = ";<<:?@9<?############################################################################################"
for baseq in asci_string:
    score = ord(baseq) - 33
    print score,

Kann geschrieben werden als.

convert_asci.py Ausführungsergebnis


26 27 27 25 30 31 24 27 30 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Je größer dieser Wert ist, desto besser ist die Qualität, sodass Sie sehen können, dass die Basis des Qualitätswerts von "#" eine sehr schlechte Qualität ist. Übrigens verwendet dieses ASCI-Codekonvertierungsprogramm eine for-Anweisung, und es ist schwierig, dass der Code vertikal lang wird, wenn das Programm länger wird, und die Ausführungsgeschwindigkeit scheint langsam zu sein. Lassen Sie es uns also mit der Karte ausdrücken.

py:convert_asci.2.py


asci_string = ";<<:?@9<?############################################################################################"

def convert_func(x):
    score = ord(x) - 33
    return score

res_score = map(convert_func, asci_string)
print res_score

text:convert_asci.2.py Ausführungsergebnis


[26, 27, 27, 25, 30, 31, 24, 27, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

Selbst wenn Sie die for-Anweisung auf diese Weise vermeiden, ist die Anweisung in der Zeile, die die Funktion definiert, lang. Also habe ich gelernt, dass Sie eine anonyme Funktion ** namens ** lambda verwenden können, um einen Prozess zu schreiben, der der Funktion "convert_func" in einer Map entspricht (wussten Sie jemals!). Es wird wie folgt sein.

py:convert_asci.3.py modifiziertes Skript


asci_string = ";<<:?@9<?############################################################################################"
res_score = map(lambda x:ord(x) - 33, asci_string)
print res_score  

** Die Zeichenfolge wird intern in ein Zeichen unterteilt und in der for-Anweisung und der Map iteriert. Ich habe die Informationen erhalten. Danke, ich habe es korrigiert. ** **.

py:convert_asci.3.Skript vor py Änderung


asci_string = ";<<:?@9<?############################################################################################"
asci_list = list(asci_string) #Dies war nicht erforderlich (Auflistung).

res_score = map(lambda x:ord(x) - 33, asci_list)
print res_score

Wie ist das? Ich habe es in einer Zeile genannt. Das Ergebnis ist das gleiche, da map eine Liste zurückgibt. Anonyme Funktionen sind Einwegfunktionen, die nur einmal verwendet werden. Es wird als anonyme Funktion bezeichnet, da es nur einmal verwendet wird und nicht benannt werden muss. Das Format zum Erstellen einer anonymen Funktion mithilfe eines Lambda-Ausdrucks lautet wie folgt.

Lambda-Argument(Im Beispiel x):Rückgabewert(Im Beispiel ord(x) - 33)

Im Beispiel ist x ein Argument, das den Wert von asci_list nacheinander von map empfängt, den angegebenen Prozess ausführt und dann den Rückgabewert zurückgibt. Das ist sehr praktisch!

Recommended Posts

Python String Processing Map und Lambda
Ruby, Python und Map
Abbildung zur Verarbeitung von Python-Zeichenfolgen
Python-Einzug und String-Format
Datenbereinigung 1 Praktische Python-Notation wie Lambda und Map
Python-String
Socket-Kommunikation und Multithread-Verarbeitung durch Python
Python: Strings kombinieren
Python-String-Format
Python-Bildverarbeitung
Python String Slice
Python-Dateiverarbeitung
Python2-Zeichenfolgentyp
Python-String-Format
Python # String-Typ
Python-String-Inversion
Erstellen Sie eine Webmap mit Python und GDAL
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Amazon API Gateway und AWS Lambda Python-Version
Unterschiede in der Zeichenfolgenverarbeitung zwischen Python, Ruby, JS und PHP (Kombination und Variablenerweiterung)
[Python] Komprimieren und dekomprimieren
Python- und Numpy-Tipps
Dynamische HTML-Seiten mit AWS Lambda und Python
[Python] Pip und Wheel
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Python: Verarbeitung natürlicher Sprache
Kommunikationsverarbeitung durch Python
Multithread-Verarbeitung in Python
String-Manipulation in Python
Python Iterator und Generator
Pythons Lambda-Ausdruck ...
[Python] Misst und zeigt die für die Verarbeitung erforderliche Zeit an
Python-Pakete und -Module
Vue-Cli- und Python-Integration
[Python] Mehrzeilige Zeichenfolgenzuweisung
Python-String-Manipulations-Master
Konvertierung zwischen hexadezimaler Zeichenfolge und Zeichenfolge
Textverarbeitung mit Python
Verarbeitung in Python beenden
Python-Eingabe und Ausgabe
Python und Ruby teilen sich
[Python2] Datumszeichenfolge → UnixTime → Datumszeichenfolge
Zufällige String-Generierung (Python)
[Python] So erstellen Sie eine Korrelationsmatrix und eine Heatmap
Asynchrone Verarbeitung von Python ~ Asynchron vollständig verstehen und warten ~
Filtern, Zuordnen, Reduzieren mit js und Python (Es gibt auch Pfeilausdrücke, Lambda-Ausdrücke und Einschlussausdrücke)
Python3> Dokumentationszeichenfolge / Dokumentzeichenfolge
Machen Sie mit AWS Lambda und Python gewöhnliche Tweets flottenartig
Python asyncio und ContextVar
Zusammenfassung der Datumsverarbeitung in Python (Datum / Uhrzeit und Datum)
Verschiedene Verarbeitung von Python
Anonyme Funktion und Kartenfunktion
Berücksichtigen Sie bei der Verarbeitung von DynamoDB Stream mit Lambda (Python) die allgemeine Vorverarbeitung.
Nehmen Sie schnell eine Abfragezeichenfolge mit API Gateway-> Lambda (Python)
Entfernen Sie Leerzeichen in voller Breite vor und nach der Zeichenfolge (Python).
Entschlüsseln Sie eine Codezeile in Python Lambda, Karte, Liste
[Lass uns mit Python spielen] Bildverarbeitung zu Monochrom und Punkten
Site-Überwachung und Alarmbenachrichtigung mit AWS Lambda + Python + Slack