Frage

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

max([x for x in range(25)]) 

würde dazu führen, dass Python zuerst eine Liste aller Elemente erstellt und dann das Maximum ermittelt, was zu einer 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 (da er iterierbar ist), würde er sich dadurch von Python2 unterscheiden?

War es hilfreich?

Lösung

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

max((x for x in range(25)))

oder einfach:

max(x for x in range(25))

Natürlich (in Python 2) erstellt range selbst eine ganze Liste. In diesem Fall möchten Sie also wirklich:

max(x for x in xrange(25))

In Bezug auf die benötigte Zeit haben jedoch alle diese Ausdrücke die gleiche Komplexität.Der wichtige Unterschied besteht darin, dass der letzte O (1) -Raum benötigt, während die anderen O (n) -Raum benötigen.

Andere Tipps

Listenverständnisse generieren immer eine Liste (es sei denn, etwas löst eine Ausnahme aus).In den meisten Fällen wird die Verwendung eines Genex empfohlen.

max(x for x in xrange(25))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top