Pythonで文字列が数値かどうか判定(isdigit, isdecimal, isnumeric)
この記事では、Pythonで文字列が数値かどうかを判定する3つのメソッド、isdigit()、isdecimal()、isnumeric()の違いと使い分けについて解説します。それぞれのメソッドの挙動を具体例とともに説明し、適切なメソッドを選択するためのガイドラインを示します。
目次
isdigit()
isdigit()メソッドは、文字列が数字のみで構成されているかを判定します。数字とは、0~9のASCII文字を指します。
string1 = "123"
string2 = "123.45"
string3 = "1,234"
string4 = "123"
print(string1.isdigit()) # True
print(string2.isdigit()) # False
print(string3.isdigit()) # False
print(string4.isdigit()) # False
小数点やカンマ、全角数字は含まれていない場合Falseを返します。
- ASCII文字の0~9のみを判定する
- 小数点やカンマなどの記号は数値とみなされない
- 全角数字は数値とみなされない
isdecimal()
isdecimal()メソッドは、文字列が十進数の数字のみで構成されているかを判定します。数字とは、0~9のUnicodeコードポイントを指します。
string1 = "123"
string2 = "123.45"
string3 = "1,234"
string4 = "123"
print(string1.isdecimal()) # True
print(string2.isdecimal()) # False
print(string3.isdecimal()) # False
print(string4.isdecimal()) # True
isdigit()と異なり、全角数字を数値として扱います。
- Unicodeコードポイントの0~9を判定する
- 小数点やカンマなどの記号は数値とみなされない
- 全角数字は数値とみなされる
isnumeric()
isnumeric()メソッドは、文字列が数値文字のみで構成されているかを判定します。数字とは、Unicodeコードポイントで数値として定義されている文字を指します。
string1 = "123"
string2 = "123.45"
string3 = "1,234"
string4 = "123"
string5 = "½"
print(string1.isnumeric()) # True
print(string2.isnumeric()) # False
print(string3.isnumeric()) # False
print(string4.isnumeric()) # True
print(string5.isnumeric()) # True
isdecimal()と同様に全角数字を数値として扱いますが、分数やローマ数字なども数値として扱います。
- Unicodeコードポイントで数値として定義されている文字を判定する
- 小数点やカンマなどの記号は数値とみなされない
- 全角数字、分数、ローマ数字などは数値とみなされる
3つのメソッドの比較
isdigit(), isdecimal(), isnumeric()の比較表です。
使用例
数値文字列の入力チェックなど、様々な場面でこれらのメソッドを使用できます。具体的な使用例を以下に示します。
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
string1 = "123"
string2 = "123.45"
string3 = "abc"
print(f"'{string1}' is a number: {is_number(string1)}") # True
print(f"'{string2}' is a number: {is_number(string2)}") # True
print(f"'{string3}' is a number: {is_number(string3)}") # False
関連記事
- Pythonで文字列がアルファベットかどうか判定(isalpha, isalnum)
- Pythonで文字列の先頭と末尾が特定の文字列か判定(startswith, endswith)
- Pythonで文字列を検索(find, rfind, index, rindex)
- Pythonで文字列の出現回数をカウント(count)
- Pythonで文字列をスライスで部分抽出
- Pythonで文字列を置換(replace, translate, re.sub)
- Pythonで文字列の大文字・小文字を変換(upper, lower, capitalize, title, swapcase)
- Pythonで文字列の先頭・末尾の空白を削除(strip, lstrip, rstrip)
- Pythonで文字列を結合(join, +演算子)
- Pythonで文字列をフォーマット(format, f文字列 (Python 3.6以降), %演算子)