文字列にPythonの数値が含まれているかどうかをチェックする方法は?Pythonの数値の文字列を確認する
フロートに変換する変数がありますが、ifステートメントを作成して、数値だけが含まれている場合にのみfloatに変換します。
文字列にPythonの数値が含まれているかどうかをチェックする方法は?Pythonの数値の文字列を確認する
フロートに変換する変数がありますが、ifステートメントを作成して、数値だけが含まれている場合にのみfloatに変換します。
これを変換し、失敗した場合は例外をキャッチします。
s = "3.14"
try:
val = float(s)
except ValueError:
val = None
try-exceptブロックを使用して数字であるかどうかを判断します。そうすれば、sが数値の場合はキャストは成功し、そうでなければValueErrorをキャッチしてプログラムが中断しないようにします。
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
あなたが一番説明したので、あなたの答えはより良いです!マイケルとハンターの両方に感謝します! – Marko
また、文字列から数値を抽出することもできます。
import string
extract_digits = lambda x: "".join(char for char in x if char in string.digits + ".")
です。その後、floatに変換します。不要なロジックはありませんので、
to_float = lambda x: float(x) if x.count(".") <= 1 else None
>>> token = "My pants got 2.5 legs"
>>> extract_digits(token)
'2.5'
>>> to_float(_)
2.5
>>> token = "this is not a valid number: 2.5.52"
>>> extract_digits(token)
'2.5.52'
>>> to_float(_)
None
マイケル・バーバーの答えはスピードのために最善となります。何らかの理由でより詳細な評価が必要な場合は、Python標準ライブラリの正規表現モジュールを使用できます。たとえば、記述したような番号を取得したいが、レイヤーを追加する基準があると決めた場合は、これが役に立ちます。
import re
mystring = '.0323asdffa'
def find_number_with_or_without_decimal(mystring):
return re.findall(r"^\.?\d+", mystring)
In [1]: find_number_with_or_without_decimal(mystring)
Out[1]: ['.0323']
正規表現は、言う「1つまでの小数で始まるものを見つける(」^「のみ行の先頭に意味し、 『』 1までを意味し、小数点以下がでエスケープされ」?\ 'それで特別な正規表現の意味は「任意の文字」ではないでしょう)、任意の桁数を持ちます。 Pythonで幸運を祈る!
組み込みの.isdigit()
がこれに該当しないのはなぜですか。コンパクト、超高速なしtry
文、および:
string = float(string) if string.isdigit() else string
Pythonでのエラー処理を考慮すると、私はそれは、言った誰マスターヨーダだったと信じていない「無試しがありませんか、またはしないでください。」
もう1つ、変数の数値は "0.123"と同じです – Marko
これはまだ浮動小数点への変換に有効です –