Python-Listen passen ihre Größe dynamisch an, aber die Vorabzuweisung kann die Leistung, besonders bei großen Datensätzen, erheblich steigern. Dieser Artikel untersucht effiziente Vorabzuweisungstechniken für Listen und andere sequenzielle Datenstrukturen.
Inhaltsverzeichnis
- Vorabzuweisung von Python-Listen
- Vorabzuweisung von NumPy-Arrays
- Vorabzuweisung mit
array.array
- Die richtige Datenstruktur auswählen
Vorabzuweisung von Python-Listen
Während Python im Gegensatz zu einigen anderen Sprachen keine direkt vorab festgelegte Listen unterstützt, können wir sie effizient mit List Comprehensions oder dem *
-Operator erstellen.
Methode 1: List Comprehension
Ideal zum Erstellen von Listen einer bestimmten Größe, die mit einem einzelnen, sich wiederholenden Wert gefüllt sind:
size = 10
my_list = [0] * size # Liste mit 10 Nullen
print(my_list) # Ausgabe: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
my_list = [None] * size # Liste mit 10 None-Werten
print(my_list) # Ausgabe: [None, None, None, None, None, None, None, None, None, None]
Methode 2: Verwendung von list()
mit einem Generator
Bietet Flexibilität für komplexere Initialisierungen, bei denen jedes Element einen eindeutigen Wert benötigt:
size = 5
my_list = list(range(size)) # Erstellt [0, 1, 2, 3, 4]
print(my_list)
my_list = list(i**2 for i in range(size)) # Erstellt [0, 1, 4, 9, 16]
print(my_list)
Wichtiger Hinweis: Die Vorabzuweisung optimiert in erster Linie die anfängliche Befüllung, indem die Größenanpassung minimiert wird. Das Anhängen von Elementen über die anfängliche Größe hinaus löst weiterhin eine dynamische Größenanpassung aus.
Vorabzuweisung von NumPy-Arrays
NumPy-Arrays eignen sich hervorragend für numerische Berechnungen und große Datensätze. Sie ermöglichen die direkte Angabe von Größe und Datentyp:
import numpy as np
size = 10
my_array = np.zeros(size, dtype=int) # Array mit 10 Nullen (Integer)
print(my_array)
my_array = np.empty(size, dtype=float) # Array mit 10 nicht initialisierten Gleitkommazahlen (vorsichtig verwenden!)
print(my_array)
my_array = np.arange(size) # Array [0, 1, 2, ..., 9]
print(my_array)
NumPy bietet verschiedene Funktionen zum Erstellen von Arrays mit unterschiedlichen Anfangswerten und Datentypen, wodurch die Effizienz numerischer Operationen deutlich gesteigert wird.
Vorabzuweisung mit array.array
Das Modul array.array
bietet eine kompakte Speicherung für homogene Daten und erfordert die Angabe des Datentyps:
import array
size = 5
my_array = array.array('i', [0] * size) # Array mit 5 Integern, initialisiert auf 0
print(my_array)
'i'
gibt den Typ vorzeichenbehaftete Ganzzahl an; weitere Typcodes finden Sie in der Dokumentation.
Die richtige Datenstruktur auswählen
Die beste Wahl (Liste, NumPy-Array, array.array
) hängt von Ihrer Anwendung und Ihren Daten ab. NumPy-Arrays werden aufgrund ihrer Leistungsvorteile im Allgemeinen für numerische Berechnungen bevorzugt. Für einfache, homogene Daten kann array.array
effizienter sein als Listen. Python-Listen bleiben vielseitig einsetzbar für allgemeine Zwecke mit gemischten Datentypen, trotz ihrer dynamischen Größenanpassung.