2016-08-01 14 views
0

Ich versuche, eine Lambda-Funktion zu schreiben (immer noch neu in funktionalen Programmierstil von Python). Ich habe eine Liste wie folgt aus:Wie schreibe ich Lambda-Funktion zum Zählen des Auftretens in einer Zeichenfolge in Python sort()

cur_list = [b'1z1zzz\r\n', b'1z1z1zzz\r\n', b'1z1z1zzz\r\n', b'zzzz\r\n', b'1zzzz\r\n'] 

Ich möchte die Liste durch die Anzahl des Auftretens von ‚1‘ in jedem von ihnen sortieren. So in der obigen Liste, wäre die richtige (sortierte) Lösung so aussehen:

cur_list = [b'zzzz\r\n', b'1zzzz\r\n', b'1z1zzz\r\n', b'1z1z1zzz\r\n', b'1z1z1zzz\r\n'] 

Welche Lambda-Funktion kann in den folgenden Code-Snippet, um effizient sortieren durch das Auftreten von ‚1‘ in einer vorgegebenen Liste eingefügt werden von Schnur?

cur_list.sort(key=#####what lambda function to insert here) 

Vielen Dank für Ihre Antworten!

+2

haben Sie irgendetwas überhaupt versucht? – njzk2

+0

@ njzk2 Zur Zeit der Frage lerne ich noch, wie man Lambda (neues Konzept für mich) benutzt. Ja, ich habe schließlich herausgefunden, wie es geht, und habe es auch unten als Kommentar geteilt. – user1330974

Antwort

3

Das wäre:

lambda x: x.count('1') 

Natürlich, wie, was Sie haben wie ein Array von Byte-Strings scheint, könnten Sie dies wünschen:

lambda x: x.count(b"1") 
+3

Nicht dekodieren. Bytes-Objekte haben die gleichen Methoden wie Strings, sie erwarten nur Bytes. Verwenden Sie einfach 'Lambda x: x.count (b" 1 ")' –

+1

Das sieht sauberer aus und sollte auch schneller sein, danke für den Tipp! –

+0

Danke für die Antwort. Wenn jemand den vollständigen Code als Antwort fragt, ist das, was ich habe: cur_list.sort (key = Lambda x: str (x) .count ('1')) oder einfach wie was @ juanpa.arrivillaga vorgeschlagen: cur_list.sort (key = Lambda x: x.count (b'1 ')) Vielen Dank! – user1330974