区分'字符'和'数字' Python中的数据类型

时间:2015-03-16 00:48:39

标签: python

我想知道是否有一种简单的方法来区分Python中的字符和数字数据类型(例如int / double / float等)。理想情况下,我希望能够区分标量和列表。

简而言之,我希望能够编写一个能够执行以下操作的函数easy_type

>>> easy_type(["hello", "world"])  
   "character"
>>> easy_type("hello")  
   "character"
>>> easy_type(['1.0', '0.0'])  
   "numeric"
>>> easy_type([0, 1, 2])  
   "numeric"
>>> easy_type(0.100)  
   "numeric"

4 个答案:

答案 0 :(得分:1)

由于您有多种类型的数据,您可能希望获得具有递归函数的单个项的类型,例如

def get_type(data):
    if isinstance(data, list):
        types = {get_type(item) for item in data}
        # If all elements of the list are of the same type
        if len(types) == 1:
            return next(iter(types))
        # if not, return "multiple"
        else:
            return "multiple"
    elif isinstance(data, str):
        # Check if the string has only numbers or it is a float number
        return "numeric" if data.isdigit() or is_float(data) else "character"
    elif isinstance(data, int) or isinstance(data, float):
        return "numeric"

辅助函数is_float定义如下

def is_float(data):
    try:
        float(data)
        return True
    except ValueError:
        return False

测试,

assert(get_type(["hello", "world"]) == "character")
assert(get_type("hello") == "character")
assert(get_type(['1.0', '0.0']) == "numeric")
assert(get_type([0, 1, 2]) == "numeric")
assert(get_type(0.100) == "numeric")

答案 1 :(得分:1)

为标量处理"character""numeric"

def easy_type(ob):
    try:
        float(ob)
        return "numeric"
    except ValueError:
        return "character"

要类似地处理列表,假设列表的所有元素都是相同的类型,并且列表不是嵌套的并且不是空的:

def easy_type(ob):
    if isinstance(ob, list):
        return mytype(ob[0])
    try:
        float(ob)
        return "numeric"
    except ValueError:
        return "character"

还要处理"multiple"

def easy_type(ob):
    if isinstance(ob, list):
        types = set((mytype(o) for o in ob))
        if len(types) > 1:
            return "multiple"
        else:
            return types.pop()
    try:
        float(ob)
        return "numeric"
    except ValueError:
        return "character"

答案 2 :(得分:0)

您可以使用built-in type() function

获得大部分内容
>>> type("hello").__name__
'str'
>>> type(1).__name__
'int'
>>> type(1.5).__name__
'float'
>>> type(["hello", "world"]).__name__
'list'

您需要决定如何处理列表,特别是因为列表可以包含不同类型的元素。

答案 3 :(得分:0)

首先,您必须清楚地了解您正在处理的数据类型。

a = ["hello","world"] -> list of str
b = "hello" -> str
c = ['1.0','0.0'] -> list of str
d = [0,1,2] -> list of int
e = 0.100

'类型()'会告诉你变量的类型。 string_name.isdigit()将告诉您字符串是否包含可以解释为数字的内容。 isinstance(var,type)将告诉您某些输入是否属于特定类型。

您必须明确定义您要处理的输入类型(例如,允许包含不同类型数据的列表?您是否允许更复杂的数据类型,例如dicts?)。此时,您可以使用上述函数编写easy_type()函数。