Seite 1 von 1

liste durchgehen mit for + in, aber zugriff auf akt. index

Verfasst: Donnerstag 5. August 2010, 06:37
von Francesco
Guten Morgen,
Gegeben eine Liste, die ich durchlaufen möchte.
Entweder als kurze Version

Code: Alles auswählen

for i in liste:
    print i
Das bevorzuge ich natürlich.

Wenn ich den index aber brauche, dann

Code: Alles auswählen

for i in range(len(liste)):
    print i, ".tes Element von liste:", liste [i]
Das ist länger.

Jetzt wäre es toll, wenn ich wie das oben aufrufen könnte, aber trotzdem an den aktuellen Index herankommen könnte. Gibt es irgendeinen Weg? Weil wenn die Liste durchgegangen wird, müsste ja intern auch ein Counter laufen, andem man irgendwie herankommen müsste.

pseudo code in der Art:

Code: Alles auswählen

for i in liste:
    print _interner_counter , ".tes Element von liste:", i
Also gibt es so interne Variablen, an die ich zugreifen könnte? Weil sonst müsste ich eine weitere Variable (die index Variable) mitlaufen lassen müssen.

Code: Alles auswählen

ind = 0
for i in liste:
    print ind + 1, ".tes Element von liste:", i
    ind += 1
Also gibt es so interne Variablen, an die ich zugreifen könnte?

Das hat google gefunden. Ist schon besser, aber noch nicht ganz das, wie ich das idealerweise haben möchte; weil da kann ich ja gleich mit der range for schleife drübergehen. Aber das scheint die einzige Möglichkeit zu sein.

Code: Alles auswählen

for idx, val in enumerate(liste):
    print idx, val

Re: liste durchgehen mit for + in, aber zugriff auf akt. ind

Verfasst: Donnerstag 5. August 2010, 06:43
von tordmor

Code: Alles auswählen

for index, element in enumerate(mylist):

Re: liste durchgehen mit for + in, aber zugriff auf akt. ind

Verfasst: Donnerstag 5. August 2010, 06:44
von noisefloor
Hallo,

was du suchst ist enumerate.

Code: Alles auswählen

>>> i = ('a','b','c')
>>> for x,y in enumerate(i):
	print x,y
	
0 a
1 b
2 c
Gruß, noisefloor

EDIT: Mist, tordmor war 1 min schneller... ;-)

Re: liste durchgehen mit for + in, aber zugriff auf akt. ind

Verfasst: Donnerstag 5. August 2010, 06:49
von Francesco
noisefloor hat geschrieben:
EDIT: Mist, tordmor war 1 min schneller... ;-)
Danke, wir haben wohl alle drei das gleichzeitig so erkannt. Zumindest ist diese Lösung besser (und schöner) als den extra counter zu initialisieren und mitzuschleifen. ;)

Re: liste durchgehen mit for + in, aber zugriff auf akt. ind

Verfasst: Donnerstag 5. August 2010, 10:58
von BlackJack
@Francesco: Noch ergänzend als Erklärung: Bei der Liste gibt es (wahrscheinlich) einen internen Zähler, den kennt aber nur der Listeniterator intern. Der Code für die ``for``-Schleife fragt ja selbst nur einen Iterator und nicht alles was "iterable" ist, kennt oder braucht auch sowas wie Indizes/Zähler. Darum gibt es generell bei ``for``-Schleifen keinen internen Zähler an den man herankommen könnte.

Re: liste durchgehen mit for + in, aber zugriff auf akt. ind

Verfasst: Donnerstag 5. August 2010, 11:18
von Francesco
BlackJack hat geschrieben:@Francesco: Noch ergänzend als Erklärung: Bei der Liste gibt es (wahrscheinlich) einen internen Zähler, den kennt aber nur der Listeniterator intern. Der Code für die ``for``-Schleife fragt ja selbst nur einen Iterator und nicht alles was "iterable" ist, kennt oder braucht auch sowas wie Indizes/Zähler. Darum gibt es generell bei ``for``-Schleifen keinen internen Zähler an den man herankommen könnte.
Ok, danke, das mit enumerate als Lösung gefällt mir ohnehin nicht so schlecht.