stack...pop()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
patrickk
User
Beiträge: 31
Registriert: Donnerstag 18. August 2005, 09:07

stack...pop()

Beitragvon patrickk » Mittwoch 24. August 2005, 09:17

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Mittwoch 24. August 2005, 09:29

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
patrickk
User
Beiträge: 31
Registriert: Donnerstag 18. August 2005, 09:07

o je

Beitragvon patrickk » Mittwoch 24. August 2005, 09:35

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:
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Mittwoch 24. August 2005, 11:31

oder halt so:

Code: Alles auswählen

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



Gruss
Benutzeravatar
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

Beitragvon hehejo » Mittwoch 24. August 2005, 11:38

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
Gruß, Johannes
ascii stupid question,
get stupid ansii

http://www.hehejo.de

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder