Re: [Python-de] Quadratische Laufzeit oder?

Am 28.09.2014 um 13:24 schrieb Stefan Schwarzer:
On 2014-09-28 10:44, Albert Hermeling wrote:
Normalerweise wird nur die Iterator-Funktion gebraucht, also das hier:
obj = Foo(range(0,100))
Wenn du die Klasse allerdings so benutzt, ist `self.iter_` eine Liste, und über diese kannst du mit `for item in self.iter_` mehrfach iterieren und Elemente bekommen.
Probier deinen Code mal mit `xrange` statt `range` aus und führe diese Schleife von dir mehrfach aus:
for item in obj: mach_was_mit_item(item)
Ich möchte nur, falls es nicht jedem bereits klar ist, daran erinnern, dass das obige für Python 2.x, aber nicht für Python 3.x gilt. In Python 3 ist range(N) keine liste, sondern ein range-objekt, was im wesentlichen ein iterator ist. Alex

Am 28.09.2014 um 14:33 schrieb Alexander Blinne:
[...] sondern ein range-objekt, was im wesentlichen ein iterator ist.
Da muss ich mich leicht korrigieren: Es ist etwas, was bei jeder Benutzung einen neuen Iterator erzeugt, denn ein range-objekt lässt sich in der Tat mehrmals iterieren. Daher funktioniert der gekapselte Iterator tatsächlich auch in Python 3 mit einem range-Objekt. Alex

Hi Alexander, On 2014-09-28 14:36, Alexander Blinne wrote:
Da muss ich mich leicht korrigieren: Es ist etwas, was bei jeder Benutzung einen neuen Iterator erzeugt, denn ein range-objekt lässt sich in der Tat mehrmals iterieren. Daher funktioniert der gekapselte Iterator tatsächlich auch in Python 3 mit einem range-Objekt.
Interessant finde ich auch, dass mit `range`-Objekten sogar Indizierung und Slicing funktionieren (wobei ein Slice ein neues `range`-Objekt gibt): In [4]: r = range(10) In [5]: list(r) Out[5]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In [6]: list(r) Out[6]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In [7]: r[1] Out[7]: 1 In [8]: r[1:3] Out[8]: range(1, 3) Irgendwie sind diese "Erleichterungen" gegenüber "normalen" Iteratoren ja auch sinnvoll, da man bei einem Range den Wert für einen Index oder ein Slice in konstanter Zeit berechnen kann, also ohne iterieren und/oder etwas zwischenspeichern zu müssen. Viele Grüße Stefan
participants (2)
-
Alexander Blinne
-
Stefan Schwarzer