Wann sollte man in Python Generatorausdrücke und wann Listenauflösungen verwenden?
# Generator expression
(x*2 for x in range(256))
# List comprehension
[x*2 for x in range(256)]
Wann sollte man in Python Generatorausdrücke und wann Listenauflösungen verwenden?
# Generator expression
(x*2 for x in range(256))
# List comprehension
[x*2 for x in range(256)]
Es gibt etwas, das meiner Meinung nach in den meisten Antworten fehlt. Das Listenverständnis erstellt grundsätzlich eine Liste und fügt sie dem Stapel hinzu. In Fällen, in denen das Listenobjekt extrem groß ist, würde Ihr Skriptprozess abgebrochen werden. Ein Generator wäre in diesem Fall vorzuziehen, da seine Werte nicht im Speicher abgelegt werden, sondern als zustandsabhängige Funktion gespeichert sind. Auch die Geschwindigkeit der Erstellung; Listen sind langsamer als Generatoren.
Kurz gesagt; Listenverständnis verwenden, wenn die Größe des Objekts nicht übermäßig groß ist, ansonsten Generatorverständnis verwenden
Bei der funktionalen Programmierung wollen wir so wenig Indizierung wie möglich verwenden. Aus diesem Grund ist islice() die bessere Wahl, wenn wir die Elemente nach dem ersten Teilstück weiter verwenden wollen, da der Iteratorstatus gespeichert wird.
from itertools import islice
def slice_and_continue(sequence):
ret = []
seq_i = iter(sequence) #create an iterator from the list
seq_slice = islice(seq_i,3) #take first 3 elements and print
for x in seq_slice: print(x),
for x in seq_i: print(x**2), #square the rest of the numbers
slice_and_continue([1,2,3,4,5])
Ausgabe: 1 2 3 16 25
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.