%Vor%
Dadurch wird nur ein Durchlauf durch die Liste durchgeführt, und die Operationen werden auf ein Minimum beschränkt. Ich habe das auf einer Wortliste mit 1.1M Einträgen, 29k eindeutigen Wörtern gemessen, und es war fast doppelt so schnell wie Patrick's Antwort. Auf einer Liste von 10k Wörtern, 2k eindeutig, war es mehr als 300x schneller als der OP-Code.
Damit Python-Code schneller wird, müssen Sie zwei Regeln beachten: Verwenden Sie den besten Algorithmus und vermeiden Sie Python.
Auf der Vorderseite des Algorithmus ist es die Hauptsache, die dies beschleunigt, wenn man die Liste einmal anstelle von N + 1 Mal wiederholt (N = Anzahl der eindeutigen Wörter).
Auf der Vorderseite von "Python vermeiden": Ich möchte, dass Ihr Code so oft wie möglich in C ausgeführt wird. Die Verwendung von defaultdict
ist also besser als ein Diktat, bei dem Sie explizit prüfen, ob der Schlüssel vorhanden ist. defaultdict
prüft das für Sie, aber in C, in der Python-Implementierung. enumerate
ist besser als for i in range(len(li))
, da es weniger Python-Schritte gibt. Und enumerate(li, 1)
macht das Zählen bei 1, anstatt irgendwo in der Schleife ein Python +1 zu haben.
Bearbeitet: Dritte Regel: Verwenden Sie PyPy. Mein Code geht auf PyPy doppelt so schnell wie auf 2.7.