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

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])

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

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:

Mittwoch 24. August 2005, 11:31

oder halt so:

Code: Alles auswählen

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

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

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
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
Antworten