Hallo forum,
noch ne newbie frage:
Ich hab hier eine liste mit strings. Jetzt bauche ich eine function die mir den index des erste elements daraus zurueckgibt, das mit einem bestimmten string anfaengt.
zB. die Liste ist ["januar","februar","maerz","april"]
die function soll dann etwa so sein:
def suche(string):
...
return index
und na klar bei suche("feb") eine 1 zurueckgeben.
Ich schaetze das liesse sich mit match objects und einer schleife von 0 bis len(liste) machen - aber geht das nicht auch ohne schleife?
fuer jede antwort dankbar,
joerg
ps das ganze soll sein um in einem command-buffer zu der einfachen history die's schon gibt noch ein autocomplete dazuzubasteln... Die history is halt ne liste, und das was man schon in die commandline getippt hat hab ich als string. Die bisherige function geht einfach in der history liste einen zurueck und inserted was sie da findet in die commandline... Tja und weil die liste bis zu 1000 strings gross werden kann haette ich das eben auch lieber ohne schleife weil das sicherlich schneller waere.
RegExps und listen
Du kannst Python die Schleifen für Dich abarbeiten lassen, mittels map und filter.joergo hat geschrieben: die function soll dann etwa so sein:
def suche(string):
...
return index
und na klar bei suche("feb") eine 1 zurueckgeben.
Ich schaetze das liesse sich mit match objects und einer schleife von 0 bis len(liste) machen - aber geht das nicht auch ohne schleife?
Folgendes funktioniert z.B:
Code: Alles auswählen
def suche(l, s):
return map(l.index, filter(lambda x: x.startswith(s), l))
Ist allerdings auch nicht optimal, da zuerst alle Einträge mit s verglichen werden, um dann nochmal eine Indexsuche zu machen...
Ob das dann soooo viel schneller ist als eine händische Schleife, hängt sicherlich von der größe der Liste und der Anzahl der Treffer ab.
Viel Spaß beim Probieren
Jörg
prima, das funktioniert bestens.
sieht jetzt so aus, weil ich ja die liste mit allen indexen (?) gar nicht brauchte sondern nur den ersten:
last = hist.index(filter(lambda x: x.startswith(usr), hist)[0])
joerg
sieht jetzt so aus, weil ich ja die liste mit allen indexen (?) gar nicht brauchte sondern nur den ersten:
last = hist.index(filter(lambda x: x.startswith(usr), hist)[0])
joerg