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!

Code: Alles auswählen

if entry.isdigit() == True:
		print entry
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 :roll:

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