Seite 1 von 1
Überprüfen ob die ersten vier Zeichen in einem String Zahlen
Verfasst: Dienstag 20. Mai 2008, 08:43
von Albert
Hallo,
ich habe eine liste mit Strings ["1234", "Servus", "5678", "Guten Tag" "5348"]. Nun würde ich gerne überprüfen, ob die ersten vier Zeichen in einem String Zahlen sind.
Code: Alles auswählen
wliste = ["1234", "Servus", "5678", "Guten Tag" "5348"]
for entry in wliste:
if entry ??? == True:
print entry
Kann mir einer sagen wie das geht?
Vielen Dank schon mal im Voraus.
Grüße
Verfasst: Dienstag 20. Mai 2008, 08:45
von Trundle
Strings können Slicing und haben eine ``isdigit``-Methode.
Verfasst: Dienstag 20. Mai 2008, 09:18
von Albert
Super, hat geklappt!
Vielen Dank für deine Hilfe!
Grüße Albert
Verfasst: Dienstag 20. Mai 2008, 10:28
von Masaru
Falls der String gänzlich eine Zahl darstellt, und man die sowieso im Anschluss aus Integer benötigt, kann man auch wie folgt vorgehen:
Code: Alles auswählen
...
try:
entry = int(entry)
print "%s ist eine Zahl" % entry
except ValueError:
print "%s war wohl doch keine Zahl" % entry
...
>>Masaru<<
Verfasst: Dienstag 20. Mai 2008, 13:11
von nkoehring
Wenn es aber doch auch Mischstrings gibt, wobei aber feststeht das - wenn - dann exakt die ersten vier Zeichen Ziffern sind, dann geht es mit Slicing sicherer:
Code: Alles auswählen
wliste = ["1234", "Servus", "5678", "Guten Tag" "5348"]
print '\n'.join( [entry for entry in wliste if entry[:4].isdigit()] )
bzw in der "langen" Variante:
Code: Alles auswählen
wliste = ["1234", "Servus", "5678", "Guten Tag" "5348"]
for entry in wliste:
if entry[:4].isdigit:
print entry
Verfasst: Dienstag 20. Mai 2008, 13:41
von Leonidas
Alternativ gäbe es auch noch sowas:
Code: Alles auswählen
In [1]: import re
In [2]: if re.match('^\d{4}', '3214deinstring'): print 'Ist OK'
...:
Ist OK
In [3]: if re.match('^\d{4}', '321keinstring'): print 'Ist OK'
...:
In [4]:
Verfasst: Dienstag 20. Mai 2008, 14:09
von lunar
Das dürfte aber um einiges langsamer sein als Slicing und isdigit

Verfasst: Dienstag 20. Mai 2008, 16:33
von nkoehring
lunar hat geschrieben:Das dürfte aber um einiges langsamer sein als Slicing und isdigit

Ja, RegEX ist im allgemeinen langsamer und wohl nur fuer komplexere Dinge wirklich sinnvoll. Aber das weiß Leonidas mit Sicherheit selbst und hat das Beispiel dementsprechend nur der Vollstaendigkeit halber hier angebracht.
Verfasst: Dienstag 20. Mai 2008, 16:54
von Leonidas
lunar hat geschrieben:Das dürfte aber um einiges langsamer sein als Slicing und isdigit

Uh, und ich dacht schon Zustandsautomaten haben Bytevergleich überholt
Nein, im Ernst - Klar, aber ich muss zugeben, dass sich das Problem recht elegant mit regulären Ausdrücken lösen lässt. Ich hatte übrigens den Satz mit dem Hammer und den regulären Ausdrücken im Kopf, wenn du es genau wissen willst.

Verfasst: Dienstag 20. Mai 2008, 17:00
von lunar
Hey, sorry, ich wollte niemanden beleidigen
@Leonidas, nkoehring
Mir ist schon klar, dass ihr das wisst. Ich nehme das Posting auch unverzüglich zurück, wenn ihr mir garantieren könnt, dass der *OP* das auch weiß

Verfasst: Dienstag 20. Mai 2008, 17:03
von Leonidas
lunar hat geschrieben:Hey, sorry, ich wollte niemanden beleidigen

Nö keine Sorge. Machen wir eben beim nächten Usertreffen zur not ein Schlammcatchen
lunar hat geschrieben:Ich nehme das Posting auch unverzüglich zurück, wenn ihr mir garantieren könnt, dass der *OP* das auch weiß

Ja, ich hätt' erwähnen sollen, dass es langsamer ist.