Seite 1 von 1

index einer liste herrausfinden

Verfasst: Donnerstag 18. September 2008, 12:28
von acoolon
Guten Tag ;)

ich wollte mal nachfragen, ob es eine Intelligentere Lösung (und ich bin sicher es gibt eine :)) für dashier gibt:

Code: Alles auswählen

>>> a = ['j','P','s','e']
>>> b = 0
>>> for i in a:
	  if i == 's':
		  print b,i
	  b+=1
2 s
(ich will, dass die Indexzahl des Listeneintrages angezeigt wird, den ich suche)

das funktioniert zwar, sieht aber scheisse aus, und man muss immer ein a,b, sonstwas als Zaehler erzeugen...

mfg

Verfasst: Donnerstag 18. September 2008, 12:47
von Leonidas

Code: Alles auswählen

a.index('s')

Verfasst: Donnerstag 18. September 2008, 12:54
von acoolon
who, ok....das war jetzt simpel

vielen dank...


mfg

Verfasst: Donnerstag 18. September 2008, 13:34
von cofi
Du musst allerdings aufpassen wenn du den Index eines Wertes willst der mehrmals in der Liste steht, denn Index gibt nur den 1. Index zurück.

Übrigens brauchst du keinen eigenen Zähler:

Code: Alles auswählen

for index, value in enumerate(list):
    ...

Verfasst: Donnerstag 18. September 2008, 14:02
von acoolon
Ja, das sieht eher nach dem aus, was ich dachte...aber mit index() geht es ja zum grossen teil auch..danke euch beiden

Verfasst: Donnerstag 18. September 2008, 14:59
von yipyip
... 'index()' hat ja auch noch Argumente für
den Start- und Endindex ...

Falls Du eine Liste aller Indextreffer brauchst
und List-Comprehensions nicht scheust,
geht auch noch:

Code: Alles auswählen

In [66]: seq = 'jPsesbys'

In [67]: val = 's'

In [68]: [i for i in [i if (lambda v, x: v == x)(val, x) else -1 for i, x in enumerate(seq)] if i >= 0] 
Out[68]: [2, 4, 7]
:wink:
yipyip

Verfasst: Donnerstag 18. September 2008, 15:55
von BlackJack
Man kann's auch übertreiben. "list comprehension" ist nämlich in der Tat eine einfache, saubere Lösung um alle Indizes zu ermitteln:

Code: Alles auswählen

In [29]: [i for i, x in enumerate(seq) if x == val]
Out[29]: [2, 4, 7]

Verfasst: Donnerstag 18. September 2008, 16:02
von yipyip
Stimmt, da bin ich arg über's Ziel hinausgeschossen...