我想知道是否有一种简单的方法来区分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"
答案 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()函数。