【问题标题】:What is the best way to check if a variable is of numeric type in python在python中检查变量是否为数字类型的最佳方法是什么
【发布时间】:2014-08-04 21:32:26
【问题描述】:

我知道我可以使用 type() 和 isinstance() 来检查变量是否属于某个类型或属于某个类。我想知道是否有一种快速的方法来检查变量是否为“数字”类型,类似于 MATLAB 中的 isumeric。如果变量是 int、long、float、double、int 数组或浮点数等,它应该返回 True。非常感谢任何建议。

谢谢。

【问题讨论】:

标签: python types


【解决方案1】:

检查一个对象是否为数字的最简单方法是进行算术运算(例如加 0),看看我们是否可以侥幸:

def isnumeric(obj):
    try:
        obj + 0
        return True
    except TypeError:
        return False

print isnumeric([1,2,3]) # False
print isnumeric(2.5)     # True
print isnumeric('25')    # False

【讨论】:

  • @Srikanth,对不起,我刚刚删除了我的评论,暗示这对于 numpy 数组来说是误报。确实,我没有意识到您将 numpy 数组包含为“数字”。
  • 由于错误的原因我得到了正确的结果仍然让我感到困扰:-(
  • @HaiVu 特别是因为这似乎与您自己对问题本身的评论相矛盾:-)
  • 我坚持我的意见:我不认为数组是数字。因此,我的解决方案是不正确的。它只是碰巧因为错误的原因产生了正确的答案。
  • 我同意,但是一旦我们阅读了问题的详细信息,您的回答实际上就回答了问题,所以这是一个很好的答案。
【解决方案2】:

检查每个项目是否可以转换为float

def mat_isnumeric(input):
    if type(input) is list:
        for item in input:
            if not is_a_number(item):
                return False
        return True
    else:
        return is_a_number(input)

def is_a_number(input):
    try:
        float(input)
        return True
    except ValueError:
        return False

运行以下脚本:

if __name__ == "__main__":
    print(mat_isnumeric(321354651))
    print(mat_isnumeric(3213543.35135))
    print(mat_isnumeric(['324234324', '2342342', '2343242', '23432.324234']))
    print(mat_isnumeric('asdfasdfsadf'))
    print(mat_isnumeric(['234234', '32432.324324', 'asdfsadfad']))

产生这个结果:

True
True
True
False
False

【讨论】:

  • 10**500 将失败。 (撇开list 是它唯一适用的顺序不谈。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2017-08-23
  • 2015-11-03
  • 2012-05-23
  • 2016-03-11
  • 1970-01-01
  • 2014-12-20
相关资源
最近更新 更多