Überprüfen ob die ersten vier Zeichen in einem String Zahlen

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
Albert
User
Beiträge: 23
Registriert: Montag 29. Oktober 2007, 09:42

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
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Strings können Slicing und haben eine ``isdigit``-Methode.
Albert
User
Beiträge: 23
Registriert: Montag 29. Oktober 2007, 09:42

Super, hat geklappt!

Code: Alles auswählen

if entry.isdigit() == True:
		print entry
Vielen Dank für deine Hilfe!

Grüße Albert
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

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<<
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

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
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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]:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

Das dürfte aber um einiges langsamer sein als Slicing und isdigit ;)
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

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.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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. :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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ß ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten