Guten Morgen,
In einen kleinen Programm gibt es eine Klasse die einen Iterator
bereitstellt. Hier ein Beispiel was ich meine
class Foo():
def __init__(self,iter_):
self.iter_ = iter_
def __iter__(self,):
return self.next()
def next(self,):
for item in self.iter_:
yield item
Normalerweise wird nur die Iterator-Funktion gebraucht, also das hier:
obj = Foo(range(0,100))
for item in obj:
mach_was_mit_item(item)
Aber manchmal will man die Komplette Liste haben, also das hier:
obj = list(Foo(range(0,100)))
Beim darüber nachdenken, kam mir der Gedanke das der Algorithmus dadurch
eine quadratische Laufzeit also O(n^2) bekommt. Den es wird ja in next()
von Foo "for for item in self.iter_" durchlaufen und durch das
"list(Foo(range(0,100)))", startet der Python-Interpreter doch auch eine
interne for Schleife, oder bin ich da auf den Holzweg? Auf irgendeiner
Art, Weise muss Python doch jedes Element in der Liste einmal erreichen.
Im Beispiel ist es hier range() im wirklichen "Leben" handelt es sich
dabei aber um eine Byte-Struktur.
Mit freundlichen Grüßen
Albert Hermeling