Die meisten Fragen, die ich gefunden habe, sind voreingenommen in Bezug auf die Tatsache, dass sie nach Buchstaben in ihren Zahlen suchen, während ich nach Zahlen in einer Zahl suche, die ich als zahllose Zeichenfolge bezeichnen möchte. Ich muss eine Zeichenfolge eingeben und prüfen, ob sie Zahlen enthält und ob sie diese ablehnt.
Die Funktion wird isdigit()
nur zurückgegeben, True
wenn ALLE Zeichen Zahlen sind. Ich möchte nur sehen, ob der Benutzer eine Nummer eingegeben hat, also einen Satz wie "I own 1 dog"
oder so.
Irgendwelche Ideen?
r'-?\d+'
\d
nur mit einer einzelnen Ziffer im Bereich0
von überein9
.Sie können eine Kombination aus
any
und verwendenstr.isdigit
:True
Andernfalls wird die Funktion zurückgegeben, wenn eine Ziffer in der Zeichenfolge vorhanden istFalse
.Demo:
quelle
any
Generatorausdrücke akzeptiert.verwenden
Ref: https://docs.python.org/2/library/stdtypes.html#str.isalpha
quelle
'_'.isalpha()
. B. Falsch.https://docs.python.org/2/library/re.html
Sie sollten besser reguläre Ausdrücke verwenden. Es ist viel schneller.
quelle
None
Sie können die Funktion isdigit () auf jedes Zeichen in der Zeichenfolge anwenden. Oder Sie könnten reguläre Ausdrücke verwenden.
Außerdem habe ich gefunden Wie finde ich eine Zahl in einer Zeichenfolge in Python? mit sehr geeigneten Möglichkeiten, Zahlen zurückzugeben. Die folgende Lösung ergibt sich aus der Antwort in dieser Frage.
Alternative:
Weitere Informationen finden Sie im Regex-Dokument: http://docs.python.org/2/library/re.html
Bearbeiten: Dies gibt die tatsächlichen Zahlen zurück, keinen booleschen Wert, sodass die obigen Antworten für Ihren Fall korrekter sind
Die erste Methode gibt die erste Ziffer und nachfolgende aufeinanderfolgende Ziffern zurück. Somit wird 1,56 als 1 zurückgegeben. 10.000 werden als 10 zurückgegeben. 0207-100-1000 wird als 0207 zurückgegeben.
Die zweite Methode funktioniert nicht.
Verwenden Sie: Um alle Ziffern, Punkte und Kommas zu extrahieren und nicht aufeinanderfolgende Ziffern nicht zu verlieren:
quelle
Sie können dafür die NLTK-Methode verwenden.
Dies findet sowohl '1' als auch 'Eins' im Text:
quelle
Sie können dies wie folgt erreichen:
if a_string.isdigit(): do_this() else: do_that()
https://docs.python.org/2/library/stdtypes.html#str.isdigit
Verwenden
.isdigit()
bedeutet auch, dass Sie nicht auf die Ausnahmebehandlung zurückgreifen müssen (versuchen / ausnehmen ), wenn Sie das Listenverständnis verwenden müssen (versuchen / ausnehmen ist innerhalb eines Listenverständnisses nicht möglich).quelle
Sie können den Bereich mit Anzahl verwenden, um zu überprüfen, wie oft eine Zahl in der Zeichenfolge angezeigt wird, indem Sie sie mit dem Bereich vergleichen:
quelle
Ich bin überrascht, dass niemand diese Kombination von
any
und erwähnt hatmap
:In Python 3 ist es wahrscheinlich das schnellste (außer vielleicht für reguläre Ausdrücke), da es keine Schleife enthält (und durch Aliasing der Funktion wird vermieden, dass nachgeschlagen wird
str
).Verwenden Sie das in Python 2 nicht als
map
Rückgabe alist
, wodurch derany
Kurzschluss unterbrochen wirdquelle
Was ist mit diesem?
quelle
Ich werde die Antwort von @zyxue etwas expliziter machen:
Dies ist die Lösung mit dem schnellsten Benchmark aus den Lösungen, die @zyxue für die Antwort vorgeschlagen hat.
quelle
Einfacher zu lösen ist wie
quelle
Dieser Code generiert eine Sequenz mit der Größe n, die mindestens Groß-, Klein- und Ziffern enthält. Durch die Verwendung der while-Schleife haben wir dieses Ereignis garantiert.
quelle
any
undord
kann kombiniert werden, um den unten gezeigten Zweck zu erfüllen.Ein paar Punkte zu dieser Implementierung.
any
ist besser, weil es wie ein Kurzschlussausdruck in der C-Sprache funktioniert und das Ergebnis zurückgibt, sobald es bestimmt werden kann, dh im Fall der Zeichenfolge 'a1bbbbbbc' werden 'b' und 'c' nicht einmal verglichen.ord
ist besser, weil es mehr Flexibilität bietet, wie Prüfnummern nur zwischen '0' und '5' oder einem anderen Bereich. Wenn Sie beispielsweise einen Validator für die hexadezimale Darstellung von Zahlen schreiben, möchten Sie, dass die Zeichenfolge nur Alphabete im Bereich von 'A' bis 'F' enthält.quelle
Dies gibt alle Zeichenfolgen zurück, die sowohl Alphabete als auch Zahlen enthalten. isalpha () gibt die Zeichenfolge mit allen Ziffern oder allen Zeichen zurück.
quelle
Dies ist wahrscheinlich nicht der beste Ansatz in Python, aber als Haskeller machte dieser Lambda / Map-Ansatz für mich vollkommen Sinn und ist sehr kurz:
anydigit = lambda x: any(map(str.isdigit, x))
Muss natürlich nicht benannt werden. Benannt, es könnte so verwendet werden
anydigit("abc123")
, was sich so anfühlt, wie ich es gesucht habe!quelle