Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:检查列表中的数据类型_Python_Search_Types_Find - Fatal编程技术网

Python:检查列表中的数据类型

Python:检查列表中的数据类型,python,search,types,find,Python,Search,Types,Find,是否有一种方法可以检查列表/字典中是否存在特定数据类型的实例,而不必显式检查每个元素/键 我怀疑答案是否定的。但是,如果它确实存在,我想它将类似于您可以在操作符中使用来搜索特定元素/键的方式,如下所示: 3 in [1, 2, 3] # => True int in [1,"a", 3.4] # => True 除了检查数据类型的实例,而不是某个特定值,如下所示: 3 in [1, 2, 3] # => True int in [1,"a", 3.4] # => T

是否有一种方法可以检查列表/字典中是否存在特定数据类型的实例,而不必显式检查每个元素/键

我怀疑答案是否定的。但是,如果它确实存在,我想它将类似于您可以在操作符中使用
来搜索特定元素/键的方式,如下所示:

3 in [1, 2, 3] # => True
int in [1,"a", 3.4] # => True
除了检查数据类型的实例,而不是某个特定值,如下所示:

3 in [1, 2, 3] # => True
int in [1,"a", 3.4] # => True

有什么想法吗?

嗯,
中的
实际上是
\uuuu包含的语法糖,它覆盖了列表的内容

如果您想使用
中的
检查类型;您可以实现自己的数据结构(子类化
列表
)并覆盖
\uuuuuu包含
,以检查类型:

class MyList(list):
    def __contains__(self, typ):
        for val in self:
            if isinstance(val, typ):
                return True
        return False

x = MyList([1, 2, 'a', 3])

print float in x # False
print str in x   # True
您还可以利用该功能:

def __contains__(self, typ):
    return any(isinstance(val, typ) for val in self)

print int in MyList([1, "a", 3.4]) # True
print int in MyList(["a", 3.4])    # False
def checkType(a_list):
    for element in a_list:
        if isinstance(element, int):
            print("It's an Integer")
        if isinstance(element, str):
            print("It's an string")
        if isinstance(element, float):
            print("It's an floating number")

numbers = [1, 2, 3]
checkType(numbers)

至于这在不检查每个元素的情况下是否可行——不,不是。在最坏的情况下,您会检查每个元素。

我认为您可以使用isinstance(元素,类型)

我做了一个函数:

def __contains__(self, typ):
    return any(isinstance(val, typ) for val in self)

print int in MyList([1, "a", 3.4]) # True
print int in MyList(["a", 3.4])    # False
def checkType(a_list):
    for element in a_list:
        if isinstance(element, int):
            print("It's an Integer")
        if isinstance(element, str):
            print("It's an string")
        if isinstance(element, float):
            print("It's an floating number")

numbers = [1, 2, 3]
checkType(numbers)
这将产生:

It's an Integer
It's an Integer
It's an Integer

不,您必须检查列表中的每个元素,或者自己跟踪列表内外的类型。Python
list
对象不知道它包含的对象的类型。请注意,中的
操作符检查每个元素。请检查这个几乎类似的问题,并给出有趣的答案。对于你的第一个问题,答案是否定的。不迭代元素是不可能的。自定义类可以包含一组类型,并在每次插入/删除时更新。。。所以支票可以很快。。。如果我们采用自定义类的方式:-)实际上,每种数据类型的计数器都会工作得更好。
\uuuuuuuuuuuuuuuuuuuuu
还可以检查参数的
类型是否为
类型
。。。我看到一个新的UserTypeList诞生;)