该答案提供了一步一步的指导,具有查找字符串的示例:
正整数正/负-整数/浮点如何在检查数字时丢弃“NaN”(不是数字)字符串?
检查字符串是否为正整数
您可以使用str.idigit()检查给定的字符串是否为正整数。
样本结果:
# For digit
>>> '1'.isdigit()
True
>>> '1'.isalpha()
False
检查字符串是否为正/负-整数/浮点
如果字符串是负数或浮点数,str.isdigit()返回False。例如:
# returns `False` for float
>>> '123.3'.isdigit()
False
# returns `False` for negative number
>>> '-123'.isdigit()
False
如果您还想检查负整数和浮点数,那么您可以编写一个自定义函数来检查它,如下所示:
def is_number(n):
try:
float(n) # Type-casting the string to `float`.
# If string is not a valid `float`,
# it'll raise `ValueError` exception
except ValueError:
return False
return True
样品运行:
>>> is_number('123') # positive integer number
True
>>> is_number('123.4') # positive float number
True
>>> is_number('-123') # negative integer number
True
>>> is_number('-123.4') # negative `float` number
True
>>> is_number('abc') # `False` for "some random" string
False
检查数字时放弃“NaN”(非数字)字符串
上述函数将为“NAN”(非数字)字符串返回True,因为对于Python,它是表示它不是数字的有效浮点数。例如:
>>> is_number('NaN')
True
为了检查数字是否为“NaN”,可以使用math.isnan()作为:
>>> import math
>>> nan_num = float('nan')
>>> math.isnan(nan_num)
True
或者,如果您不想导入其他库来检查它,那么您可以通过使用==将其与自身进行比较来检查它。当nan float与自身比较时,Python返回False。例如:
# `nan_num` variable is taken from above example
>>> nan_num == nan_num
False
因此,上述函数is_number可以更新为“NaN”返回False,如下所示:
def is_number(n):
is_number = True
try:
num = float(n)
# check for "nan" floats
is_number = num == num # or use `math.isnan(num)`
except ValueError:
is_number = False
return is_number
样品运行:
>>> is_number('Nan') # not a number "Nan" string
False
>>> is_number('nan') # not a number string "nan" with all lower cased
False
>>> is_number('123') # positive integer
True
>>> is_number('-123') # negative integer
True
>>> is_number('-1.12') # negative `float`
True
>>> is_number('abc') # "some random" string
False
PS:根据号码类型,每次检查的每次操作都会产生额外的开销。选择符合您需求的is_number函数版本。