index einer liste herrausfinden

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
acoolon
User
Beiträge: 27
Registriert: Samstag 2. August 2008, 20:16

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Code: Alles auswählen

a.index('s')
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
acoolon
User
Beiträge: 27
Registriert: Samstag 2. August 2008, 20:16

who, ok....das war jetzt simpel

vielen dank...


mfg
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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):
    ...
acoolon
User
Beiträge: 27
Registriert: Samstag 2. August 2008, 20:16

Ja, das sieht eher nach dem aus, was ich dachte...aber mit index() geht es ja zum grossen teil auch..danke euch beiden
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

... '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
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]
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Stimmt, da bin ich arg über's Ziel hinausgeschossen...
Antworten