如何在Python中检查字符串是否表示数值?
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
上述方法可行,但似乎很笨拙。
如果您正在测试的内容来自用户输入,那么即使它表示int或float,它仍然是一个字符串。请参阅如何将输入读取为数字?用于转换输入,并询问用户输入,直到他们给出有效响应以确保输入在继续之前表示int或float(或其他要求)。
在浮点数的最常见情况下,我们希望处理整数和小数。让我们以字符串“1.1”为例。
我会尝试以下方法之一:
1.>isnumeric()
word = "1.1"
"".join(word.split(".")).isnumeric()
>>> True
2.>isdigit()
word = "1.1"
"".join(word.split(".")).isdigit()
>>> True
3.>isdecimal()
word = "1.1"
"".join(word.split(".")).isdecimal()
>>> True
速度:
► 所有上述方法具有相似的速度。
%timeit "".join(word.split(".")).isnumeric()
>>> 257 ns ± 12 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit "".join(word.split(".")).isdigit()
>>> 252 ns ± 11 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit "".join(word.split(".")).isdecimal()
>>> 244 ns ± 7.17 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
用户助手功能:
def if_ok(fn, string):
try:
return fn(string)
except Exception as e:
return None
然后
if_ok(int, my_str) or if_ok(float, my_str) or if_ok(complex, my_str)
is_number = lambda s: any([if_ok(fn, s) for fn in (int, float, complex)])