Seite 1 von 1
stack...pop()
Verfasst: Mittwoch 24. August 2005, 09:17
von patrickk
Hallo,
kann mir das einer erklaeren:
i=0
print(len(list))
while i<=(len(list)):
#remove old objects from stack
list.pop(0)
i+=1
print(len(list))
Ausgabe:
90
44
wie kommt das? Warum sind noch so viele in der Liste
Patrick
Verfasst: Mittwoch 24. August 2005, 09:29
von mawe
Hi!
Sehr knifflig

Na schaun wir mal schrittweise:
Ok, am Anfang hat liste 90 elemente, len(liste) ist also 90. i=0
while i <= len(liste) ist also
while i <= 90.
Gut, wir poppen (:)) also ein Element weg. Aber wie gross ist jetzt
len(liste)?! 89
D.h. wir haben
while i <= 89. Naja, und so weiter
len(liste) wird also immer kleiner, und i immer grösser.
Ums anschaulicher zu machen, versuch mal das:
Code: Alles auswählen
In [1]: liste = [1 for i in range(90)]
In [2]: i = 0
In [3]: while i <= len(liste):
...: print "%i <=> %i" % (i, len(liste))
...: liste.pop(0)
...: i += 1
UPDATE: Hier noch die Lösung des "Problems":
Code: Alles auswählen
In [5]: liste = [1 for i in range(90)]
In [6]: i = 0
In [7]: length = len(liste)
In [8]: while i < length:
...: liste.pop(0)
...: i += 1
...:
Gruß, mawe
o je
Verfasst: Mittwoch 24. August 2005, 09:35
von patrickk
O mann,
ist wohl noch zu frueh fuer mich... Danke fuer die Antwort. Ist ja klar, das die Bedingung sich aendert. Hab einfach davor length = len(list) gesetzt. Das ist nat. const.

Verfasst: Mittwoch 24. August 2005, 11:31
von rayo
Verfasst: Mittwoch 24. August 2005, 11:38
von hehejo
Oder du arbeitest mit einer Kopie der Liste
Code: Alles auswählen
count = 0;
liste = [1 for i in xrange(20)]
for i in liste[:]:
liste.pop()
count += 1
print len(liste)
print count