Es gibt eine Möglichkeit, es spät in jeder Sprache zu verwenden. Ich habe die Methode verwendet, es spät zu verwenden Es ist leicht zu sagen: "Die Sprache XX, die Bibliothek ist langsam." Hier sind einige Dinge, die Anfänger tun.
-Um ein Listenelement hinzuzufügen, wird das Ergebnis der Verkettung mit dem Operator + mit der Liste der Liste zugewiesen.
ex.py
a = []
for i in range(1000):
a = a + [i]
・ Trotz der Tatsache, dass es eine effektive Methode gibt, um die Liste zur Liste hinzuzufügen Es wird wiederholt, einzelne Elemente anzuhängen. (Im Fall von Python gibt es eine Extend-Methode.)
・ Wenn die Datenstruktur nicht ordnungsgemäß verwendet wird Listen werden für eine ausreichende Verarbeitung in Wörterbüchern und Sätzen verwendet. Es ist O (N), um sicherzustellen, dass die Liste Werte enthält if x in listData: Ob es im Schlüssel des Wörterbuchs enthalten ist, ist O (1) if dictData.has_key(x): Ob es im Set enthalten ist, ist O (1) if x in setData:
・ Ohne zu bemerken, dass es mithilfe der in der Standardbibliothek enthaltenen Funktionen effektiv ausgeführt werden kann. Ich mache eine langsame Implementierung mit meiner eigenen Bibliothek.
Suchen Sie in einer Bibliothek, die ein Datenformat bereitstellt, das als Satz bezeichnet wird, die Zusammenführung, den gemeinsamen Teil und den Unterschied des Satzes. Eine Methode wird bereitgestellt. Für Python-Set-Typ s.union(t) s.intersection(t) s.difference(t)
Mit ihnen erhalten Sie höchstwahrscheinlich ein übersichtliches Programm, das schneller als Ihre eigene Bibliothek ausgeführt wird. Ich werde.
Beispiel: In C ++ können Sie als Referenz übergeben, aber Sie übergeben als Wert. Erstellen Sie eine Kopie eines unnötigen Objekts. (Ein unzureichender Textlehrplan reicht aus, um in C ++ nur das Übergeben von Werten und das Übergeben von Zeigern zu lehren.)
・ Trotz der Tatsache, dass die Bibliothek so konzipiert ist, dass Matrixberechnungen effektiv durchgeführt werden In einer solchen Bibliothek werden Matrixoperationen in einer Schleife von for-Anweisungen verarbeitet. (MATLAB, Python Numpy usw.)
ex2.py
# -*- coding: utf-8 -*-
def func1():
b=['d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's']
for i in range(10000):
a=['a', 'b', 'c']
for x in b:
a= a+[x]
# print a
def func2():
b=['d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's']
for i in range(10000):
a=['a', 'b', 'c']
for x in b:
a.append(x)
# print a
def func3():
b=['d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's']
for i in range(10000):
a=['a', 'b', 'c']
a = a+b
# print a
def func4():
b=['d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's']
for i in range(10000):
a=['a', 'b', 'c']
a.extend(b)
# print a
if __name__=='__main__':
func1()
func2()
func3()
func4()
Im Fall von Python können Sie ein Profil erstellen, ohne das Skript neu zu schreiben, indem Sie [Ausführen] [Profil] in der integrierten Spyder-Umgebung verwenden.
Zusammenfassung: Verwenden Sie die Methoden zum Anhängen und Erweitern, um Daten zur Liste hinzuzufügen. Es ist keine gute Idee, die Zuweisung mit dem Operator + zu wiederholen. Verwenden Sie unterschiedliche Datenstrukturen wie Listen, Wörterbücher und Mengen. Verwenden Sie die Datenstrukturmethoden in Standardbibliotheken und vermeiden Sie es, selbst gleichwertige Funktionen zu erstellen. Machen Sie keine unnötigen Kopien der Daten. Nicht für for-Schleifen verwenden, die ohne for-Schleifen in Array-Operationen ausgeführt werden können.
Nachtrag: Wenn Sie mehr über diese Inhalte erfahren möchten, "High Performance Python" Du solltest lesen. Zum Zeitpunkt des Schreibens dieses Artikels war diese japanische Übersetzung noch nicht veröffentlicht worden.
Referenzinformationen Geschwindigkeitsvergleich zum Hinzufügen von Python-Listen (Anhängen, Einschlussnotation usw.) http://nonbiri-tereka.hatenablog.com/entry/2014/10/20/110304
Recommended Posts