RegExps und listen

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

RegExps und listen

Beitragvon joergo » Dienstag 31. Dezember 2002, 17:53

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. :)
Gast

Re: RegExps und listen

Beitragvon Gast » Mittwoch 1. Januar 2003, 13:27

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?



Du kannst Python die Schleifen für Dich abarbeiten lassen, mittels map und filter.

Folgendes funktioniert z.B:

Code: Alles auswählen

def suche(l, s):
  return map(l.index, filter(lambda x: x.startswith(s), l))


Das gibt eine Liste mit Indizes aller Einträge in der Liste l wieder, die mit dem String s beginnen.

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
Gast

Beitragvon Gast » Mittwoch 1. Januar 2003, 17:26

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

Wer ist online?

Mitglieder in diesem Forum: Joshuah992