Effektive Python 2nd Edition-90-Elemente zur Verbesserung des Python-Programms ist wirklich wunderbar, also lese ich es beim Weinen.
Es gab einen Artikel darüber, wie man mit dem fehlenden Diktatschlüssel umgeht, daher möchte ich, dass Sie dieses Buch für Details lesen, aber ich habe es gemessen, weil ich mir Sorgen über die Verarbeitungszeit jedes einzelnen gemacht habe.
Diesmal ist es ziemlich einfach, aber ich werde einen Prozess schreiben, um die Zeichen zu zählen, die in einer bestimmten Zeichenfolge erscheinen. Die Ausführungsumgebung ist die Standardeinstellung für Google Colab.
Importieren Sie zunächst die erforderlichen Bibliotheken.
import time, defaultdict
Richten Sie eine geeignete Zeichenfolge für die Aggregation aus.
target = 'super_string_of_my_passages. but this does not make sense at all. because this is nothing'
Schließlich wird der nach der Anzahl der Vorkommen sortierte Schlüsselwert ausgegeben, und das erwartete Ergebnis ist wie folgt.
[('s', 13),
(' ', 12),
('e', 8),
('t', 7),
('a', 6),
('i', 5),
('n', 5),
('_', 4),
('o', 4),
('u', 3),
('g', 3),
('h', 3),
('p', 2),
('r', 2),
('m', 2),
('.', 2),
('b', 2),
('l', 2),
('f', 1),
('y', 1),
('d', 1),
('k', 1),
('c', 1)]
Die if-Anweisung prüft, ob der Schlüssel vorhanden ist, und gibt dem fehlenden Schlüssel einen Anfangswert, indem ein in-Ausdruck verwendet wird, der True zurückgibt. Wahrscheinlich der erste einfache Weg, um darauf zu kommen.
%%time
ranking = {}
for key in target:
if key in ranking.keys():
count = ranking[key]
else:
count = 0
ranking[key] = count + 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)
CPU times: user 45 µs, sys: 9 µs, total: 54 µs Wall time: 56.3 µs
Verwenden Sie die try-Except-Anweisung, um den KeyError, der die Fehlerursache verursacht, als erwarteten Fehler zu behandeln.
%%time
ranking = {}
for key in target:
try:
count = ranking[key]
except KeyError:
count = 0
ranking[key] = count + 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)
CPU times: user 59 µs, sys: 11 µs, total: 70 µs Wall time: 78.2 µs
Verwenden Sie die get-Methode des integrierten Diktats.
%%time
ranking = {}
for key in target:
count = ranking.get(key, 0)
ranking[key] = count + 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)
CPU times: user 43 µs, sys: 8 µs, total: 51 µs Wall time: 53.6 µs
%%time
ranking = defaultdict(int)
for s in target:
ranking[s] += 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)
CPU times: user 36 µs, sys: 8 µs, total: 44 µs Wall time: 47.2 µs
Das Standarddiktat kann gut sein! (* ^^)
Das ist alles für die in diesem Buch behandelten Methoden. Hey, wenn du diese Art der Verarbeitung machst, kannst du ihn benutzen! Kannst du es nicht vergessen? Ich werde es als zusätzliche Ausgabe schreiben, weil es hineingestoßen zu sein scheint. In einem so einfachen Fall können Sie die Counter-Klasse der Sammlungsbibliothek verwenden. Es ist praktisch, die Anzahl der Vorkommen in jedem Element zu zählen. Da es eine most_common-Methode gibt, die nach der Nummer sortiert, verwenden Sie sie.
from collections import Counter
%%time
ranking = Counter(target)
ranking.most_common()
CPU times: user 53 µs, sys: 0 ns, total: 53 µs Wall time: 56.5 µs
Vielen Dank!
Recommended Posts