Hi,
Ich habe eine Liste von Strings und moechte ihre elemente iterativ in einer For-schleife
zunaechst mit einem vorgebenen String vergleichen(if-Anweisung) bevor sie dann bestimmte Operationen durchfuehren.
Wie geht das?
Ich habe mir bereits re angeguckt,finde allerdings keine passende Methode.Eine Idee?
ps:sorry falls die Frage euch "too simple" vorkommen sollte,ich bin naemlich noch ein Anfaenger.'verspreche Besserung...
strings vergleichen
Hi,
wenn ich das richtig verstehe, hast du also eine Menge von Strings und willst die mit einem String vergleichen. Wenn 1 String in der Menge mit dem String übereinstimmt, soll irgendetwas passieren:
1.) Ohne for-schleife,sondern if-statement
2.) for-schleife
Hoffe , es is das was du meinst.
Mfg,
Kolazomai
wenn ich das richtig verstehe, hast du also eine Menge von Strings und willst die mit einem String vergleichen. Wenn 1 String in der Menge mit dem String übereinstimmt, soll irgendetwas passieren:
1.) Ohne for-schleife,sondern if-statement
Code: Alles auswählen
x = "gesuchter string"
a = ["menge","mit","den","strings"]
if x in a:
print x,"ist in a"
Code: Alles auswählen
gesucht = "gesuchter string"
a = ["menge","mit","den","strings"]
for x in a:
if x == gesucht:
print "mach das und das"
break #?
Mfg,
Kolazomai
nicht wirklich.
Die Strings in der Liste koennten Dateiennamen mit einer Endung(.py zum Beispiel) sein und x wuerde ein teil von dem Wort vor der Endung entsprechen also:
a=["uvw2.jpg","abc4.gif"]
//und so haette ich es gerne(syntax nur fuer das Beispiel also bitte nicht gruen werden):
if(x="uvw")
do anything
....
Ich muss also zunaechst aus dem Element der Liste ein String extrahieren,den ich dann mit x vergleiche.
Die Strings in der Liste koennten Dateiennamen mit einer Endung(.py zum Beispiel) sein und x wuerde ein teil von dem Wort vor der Endung entsprechen also:
a=["uvw2.jpg","abc4.gif"]
//und so haette ich es gerne(syntax nur fuer das Beispiel also bitte nicht gruen werden):
if(x="uvw")
do anything
....
Ich muss also zunaechst aus dem Element der Liste ein String extrahieren,den ich dann mit x vergleiche.
Das müsste mit der String Funktion find(string,suchstring) funktionieren, also in etwa so:
^kein getesteter Code!
Code: Alles auswählen
x = "gesuchter string"
a = ["menge.py","mit","den","strings"]
for s in a:
if string.find(s,x):
print "Treffer"
Ich hab auch mal sowas in der art gebraucht.... vieleicht hilft es weiter
Code: Alles auswählen
import re
searchstring = "string" #suchbegriff
a = ["menge","mit","den","strings"]
pattern = re.compile('.*%s.*' % (searchstring), re.I) #re.I sorgt dafür, dass es nicht case-sensitiv ist
for element in a:
if pattern.match(element):
print element
Ich find' man schiesst für so ein Problem mit `re` mit Kanonen auf Spatzen. Die Zeichenkette(n) in Kleinbuchstaben umwandeln und dann mit ``in`` den `searchstring` zu suchen ist wohl kürzer und einfacher zu verstehen.knekke hat geschrieben:Code: Alles auswählen
import re searchstring = "string" #suchbegriff a = ["menge","mit","den","strings"] pattern = re.compile('.*%s.*' % (searchstring), re.I) #re.I sorgt dafür, dass es nicht case-sensitiv ist for element in a: if pattern.match(element): print element
Bei Deiner `re`-Lösung würde ich den `searchstring` aber unbedingt noch durch `re.escape()` jagen, damit keine Probleme entstehen, wenn der `searchstring` etwas enthält was in einem regulären Ausdruck eine besondere Bedeutung hat.
Code: Alles auswählen
x = "gesuchter string"
a = ["menge.py","mit","den","strings"]
liste_aus_x = x.split()
# ergibt ["gesuchter","string"]
for s in a:
if s in liste_aus_x:
print "Treffer"
r2d2
äh, nimm diese schlange von meinem hals.
Was ist, wenn in a ["la.py","etc.usw"] steht und der gesuchte string y ist ? Dann wird la.py als Treffer angezeigt, obwohl err2d2 hat geschrieben:ohne kommentarCode: Alles auswählen
x = "gesuchter string" a = ["menge.py","mit","den","strings"] liste_aus_x = x.split() # ergibt ["gesuchter","string"] for s in a: if s in liste_aus_x: print "Treffer"
r2d2
will. Also sollte / müsste man jeweils das s nochmal beim . splitten und nur jedes 2te Argument hernehmen. Danach stellt sich aber wieder das problem ,was passiert wenn die Datei "Version1.0.3.4.py" heisst ? Deshalb ne Schleife , die die letzten Buchstaben [-x] auf einen punkt überprüft und dann ggfls abschneidet ?Die Strings in der Liste koennten Dateiennamen mit einer Endung(.py zum Beispiel) sein und x wuerde ein teil von dem Wort vor der Endung entsprechen
Ausserdem soll ja , soweit ich das verstanden habe, der gesuchte String auch nur ein Teil der Dateiname ( Endung weglassend ) sein können.
Mfg,
Kolazomai
dann muss der programmierer dafür sorgen, dass die liste a die entsprechenden werte auf enthält.
dies sollte idealerweise schon bei erstellen der liste passieren.
dann kann man den string mit
splitten
zugegeben ein etwas umständlicher weg.
hätte ich kenntnis über die anderen bestandteile des programmes, könnte ich sicherlich einen effizienteren weg vorschlagen
im moment ist nicht mal klar, woher die werten im a kommen, und ob man diese liste schon bei der erstellung "passend" speichern kann.
kommt mir etwas wie die blindgeburt im mittelalter vor, wo der arzt der frau bei der entbindung nicht unter den rock gucken durfte.
r2d2
Code: Alles auswählen
nicht: a = ["menge.py","mit","den","strings"]
sondern: a = ["menge", "py", "mit", "den", "strings"]
dann kann man den string mit
Code: Alles auswählen
liste_aus_x = x.replace('.', ' ').split()
zugegeben ein etwas umständlicher weg.
hätte ich kenntnis über die anderen bestandteile des programmes, könnte ich sicherlich einen effizienteren weg vorschlagen
im moment ist nicht mal klar, woher die werten im a kommen, und ob man diese liste schon bei der erstellung "passend" speichern kann.
kommt mir etwas wie die blindgeburt im mittelalter vor, wo der arzt der frau bei der entbindung nicht unter den rock gucken durfte.
r2d2
äh, nimm diese schlange von meinem hals.
Hihi,
ja
das mit dem Split könnte ja auch ned funktionieren, wie ich angedeutet hab oben, weil mehrere . ja vorkommen könnten, die nicht nur das den Übergang zum Datei-Ende ankündigen.
Vielleicht schmeisst uns noch paar Fetzen Code her ? Dir wird sicher keiner was klauen
OpenSource 4tw
Mfg,
Kolazomai
ja

das mit dem Split könnte ja auch ned funktionieren, wie ich angedeutet hab oben, weil mehrere . ja vorkommen könnten, die nicht nur das den Übergang zum Datei-Ende ankündigen.
Vielleicht schmeisst uns noch paar Fetzen Code her ? Dir wird sicher keiner was klauen

OpenSource 4tw

Mfg,
Kolazomai
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
Hi
Also irgendwie hab ich das gefühl, dass ihr die Antwort schon lange geschrieben habt.
Was er suchte war glaubs einfach ein:
und bisher hat er ja nicht mehr geantwortet.
Gruss
Also irgendwie hab ich das gefühl, dass ihr die Antwort schon lange geschrieben habt.
Was er suchte war glaubs einfach ein:
Code: Alles auswählen
item.find(suchstring)
Gruss