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.
:oops:

Verfasst: Mittwoch 24. August 2005, 11:31
von rayo
oder halt so:

Code: Alles auswählen

while len(liste) > 0:
    liste.pop(0)

Gruss

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