Verringern Sie die Listenübersichten in Python auf effiziente Weise?

8

Ich bin ein Anfänger bei Python, und das ist mein erster Beitrag, also sei nicht zu hart :). Ich habe in letzter Zeit mit Python herumgespielt und mich gefragt, ob sowas wie

%Vor%

würde dazu führen, dass Python zuerst eine Liste aller Elemente erstellt und dann das Maximum findet, was zu O (2n) Zeit führt, oder es würde das Maximum verfolgen, während es für Θ (n) iteriert. Da sich der Bereich in Python3 unterscheidet (weil er iterierbar ist), würde das auch anders sein als in Python2?

    
daveeloo 18.03.2011, 08:49
quelle

2 Antworten

14

Ihr Beispiel führt dazu, dass Python zuerst die gesamte Liste erstellt. Wenn Sie das vermeiden möchten, können Sie stattdessen einen Generatorausdruck verwenden:

%Vor%

oder einfach:

%Vor%

Natürlich (in Python 2) erstellt range selbst eine ganze Liste, was Sie in diesem Fall also wirklich wollen:

%Vor%

Allerdings haben alle diese Ausdrücke hinsichtlich der Zeit die gleiche Komplexität. Der wichtige Unterschied ist, dass der letzte O (1) -Raum benötigt, während die anderen O (n) -Raum benötigen.

    
jchl 18.03.2011, 08:52
quelle
2

Listenkompressen generieren immer eine Liste (es sei denn, es wird eine Ausnahme ausgelöst). In den meisten Fällen wird stattdessen die Verwendung eines Genex empfohlen.

%Vor%     
Ignacio Vazquez-Abrams 18.03.2011 08:51
quelle

Tags und Links