strings vergleichen

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
scrowface
User
Beiträge: 10
Registriert: Donnerstag 2. März 2006, 15:05

Dienstag 7. März 2006, 17:52

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...
Benutzeravatar
Kolazomai
User
Beiträge: 33
Registriert: Donnerstag 16. Februar 2006, 15:05
Kontaktdaten:

Dienstag 7. März 2006, 18:26

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

Code: Alles auswählen

x = "gesuchter string"
a = ["menge","mit","den","strings"]

if x in a:
   print x,"ist in a"
2.) for-schleife

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 #?
Hoffe , es is das was du meinst.

Mfg,

Kolazomai
scrowface
User
Beiträge: 10
Registriert: Donnerstag 2. März 2006, 15:05

Dienstag 7. März 2006, 18:35

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.
helmut
User
Beiträge: 57
Registriert: Mittwoch 2. November 2005, 07:45
Wohnort: Dormagen

Dienstag 7. März 2006, 18:53

Sieh Dir mal den Variablentyp String und seine Methoden an.

Gruss, Helmut
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

Dienstag 7. März 2006, 19:16

Das müsste mit der String Funktion find(string,suchstring) funktionieren, also in etwa so:

Code: Alles auswählen

x = "gesuchter string"
a = ["menge.py","mit","den","strings"]

for s in a:
       if string.find(s,x):
              print "Treffer"
^kein getesteter Code!
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Dienstag 7. März 2006, 19:36

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
BlackJack

Dienstag 7. März 2006, 21:42

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

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.
r2d2
User
Beiträge: 43
Registriert: Donnerstag 2. März 2006, 23:05
Wohnort: Bielefeld

Dienstag 7. März 2006, 22:06

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"
ohne kommentar

r2d2
äh, nimm diese schlange von meinem hals.
Benutzeravatar
Kolazomai
User
Beiträge: 33
Registriert: Donnerstag 16. Februar 2006, 15:05
Kontaktdaten:

Mittwoch 8. März 2006, 13:48

r2d2 hat geschrieben:

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"
ohne kommentar

r2d2
Was ist, wenn in a ["la.py","etc.usw"] steht und der gesuchte string y ist ? Dann wird la.py als Treffer angezeigt, obwohl er
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
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 ?

Ausserdem soll ja , soweit ich das verstanden habe, der gesuchte String auch nur ein Teil der Dateiname ( Endung weglassend ) sein können.

Mfg,

Kolazomai
r2d2
User
Beiträge: 43
Registriert: Donnerstag 2. März 2006, 23:05
Wohnort: Bielefeld

Mittwoch 8. März 2006, 16:43

dann muss der programmierer dafür sorgen, dass die liste a die entsprechenden werte auf enthält.

Code: Alles auswählen

nicht: a = ["menge.py","mit","den","strings"]
sondern: a = ["menge", "py", "mit", "den", "strings"]
dies sollte idealerweise schon bei erstellen der liste passieren.

dann kann man den string mit

Code: Alles auswählen

liste_aus_x = x.replace('.', ' ').split()
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
äh, nimm diese schlange von meinem hals.
Benutzeravatar
Kolazomai
User
Beiträge: 33
Registriert: Donnerstag 16. Februar 2006, 15:05
Kontaktdaten:

Mittwoch 8. März 2006, 17:07

Hihi,

ja :D

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 :P

OpenSource 4tw ;)

Mfg,

Kolazomai
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Mittwoch 8. März 2006, 17:37

Hi

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)
und bisher hat er ja nicht mehr geantwortet.

Gruss
scrowface
User
Beiträge: 10
Registriert: Donnerstag 2. März 2006, 15:05

Freitag 10. März 2006, 09:56

Keine Sorge rayo,
ich habe mir das alles bereits angeguckt und dein Vorschlag hat mir sehr geholfen.
Ich bin nur genervt, weil ich nicht selbst darauf gekommen bin...

Beweis:

*&$#%^ = scrowface in rage!
Antworten