PYTHON MEBY

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

関連記事