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

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
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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
Zuletzt geändert von Francesco am Donnerstag 5. August 2010, 06:46, insgesamt 1-mal geändert.
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

Code: Alles auswählen

for index, element in enumerate(mylist):
http://www.felix-benner.com
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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... ;-)
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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. ;)
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.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

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.
Antworten