Python区分数据类型

Python区分数据类型,python,types,Python,Types,我有两种不同类型的python列表: 1.test1=['abc','cde','fgh'] 2.test2=[{'name':'me','address':'usa'}] 当我检查类型时,两者都显示为列表: 如果test1是list:-->true 如果test2是list:-->true 有什么方法可以检查它是字符串列表还是字典列表吗?检查对象是否属于您通常使用的类isinstance >>> isinstance("hello", str) True >>

我有两种不同类型的python列表:
1.test1=['abc','cde','fgh']
2.test2=[{'name':'me','address':'usa'}]

当我检查类型时,两者都显示为列表:

如果test1是list:-->true

如果test2是list:-->true


有什么方法可以检查它是字符串列表还是字典列表吗?

检查对象是否属于您通常使用的类
isinstance

>>> isinstance("hello", str)
True
>>> isinstance({}, dict)
True
>>> isinstance([], list)
True
>>> isinstance(5, int)
True
>>> isinstance("hello", int)
False
请尝试以下代码段:

for item in test1:
   print(type(item))

test2的类似代码段。

是的,它们都是列表,句号;类型不考虑列表中的内容

from typing import List, Dict


test1: List[str] = ['abc', 'cde', 'fgh']
test2: List[Dict[str,str]] = [{'name': 'me', 'address': 'use']

def foo(x: List[str]):
    ...
您可以使用类型提示来限制列表中应该包含的内容,但这些提示仅用于记录预期用途,或通过
mypy
等工具;它们不会影响你可以在列表中实际添加的内容

from typing import List, Dict


test1: List[str] = ['abc', 'cde', 'fgh']
test2: List[Dict[str,str]] = [{'name': 'me', 'address': 'use']

def foo(x: List[str]):
    ...
mypy
将任何试图将
test1
传递到
foo
的行为标记为错误,但在实际运行代码时,这是允许的

mypy
也会标记为错误,例如

test3: List[str] = ['foo', 1]

由于
1
不是
str
,但在运行时这是完全合法的。

那么,
test1
test2
是列表,您可以通过

>>> isinstance(test1, list)                                                     
True
>>> isinstance(test2, list)                                                     
True
test1是list
test2是list
实际上返回
False
,因为内置的
list
类都不是。)

可能让您感到困惑的是,
test2
是一个只有一个元素的列表,而该元素是一个字典

>>> test2[0]                                                                    
{'name': 'me', 'address': 'usa'}
>>> type(test2[0])                                                              
dict
如果您想知道列表中包含的所有类型,可以这样做

>>> l = [1, '2', []]                                                            
>>> set(map(type, l))                                                           
{int, list, str}
# alternative
>>> set(type(x) for x in l)                                                     
{int, list, str}

您可以使用以下内容:

test1=[“abc”、“cde”、“fgh”]
如果类型(test1)为列表:
打印(“你好”)
#你好
它将使用
type(arg)
函数,您可以直接传递变量或数据以获取作为输出的类型


例如,
type(“test”)
将使其返回
,这意味着它是一个字符串。

我将检查每个列表的第一个元素,以确定它是什么类型的列表。例如:

list1_type=typeof(list1[0])

list2_type=typeof(list2[0])


当然,列表不必具有所有相同的类型,因此,如果不检查每个元素,您就无法确定。主要有两种方法可以做到这一点,使用type()或isinstance()。如果您不知道列表的确切类型,最好使用前者(type()),否则后者更合适。 我的解决方案解决了第一种情况,它假设列表可能包含多个类型

test1 = ['abc', 'cde', 'fgh']
test2 = [{'name': 'me', 'address': 'usa'}]
test3 = ['abc', 'cde', 3, [2, 1]]
print("Test1 is a list of ", set([type(elem) for elem in test1])) #str
print("Test2 is a list of ", set([type(elem) for elem in test2])) #dict
print("Test3 is a list of ", set([type(elem) for elem in test3])) #str, int, list

我希望这能回答您的问题:-)

test2不是有效的语法,是否要使用{}?您好,感谢您的及时回复。我刚刚更新了test2关于
type(test1[0])
isinstance(test2[0],dict)
由于列表可能是异构的,所以您必须检查每个元素的类型以确保“type”。