528 Stimmen

Generatorausdrücke vs. Listenauffassungen

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)]

1voto

Praise Punkte 33

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

0voto

edW Punkte 1839

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.com

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.

Powered by:

X