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

mad*_*mov 3 python search types find

有没有办法检查列表/字典中是否存在特定数据类型的实例,而无需显式检查每个元素/键?

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

3 in [1, 2, 3] # => True
Run Code Online (Sandbox Code Playgroud)

除非您要检查数据类型的实例而不是某个特定值,如下所示:

int in [1,"a", 3.4] # => True
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Bah*_*rom 7

Wellin实际上是 for 的语法糖__contains__,它遍历列表的内容。

如果您想改用in检查类型;您可以实现自己的数据结构(子类化list)并覆盖__contains__以检查类型:

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
Run Code Online (Sandbox Code Playgroud)

您还可以利用any功能:

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
Run Code Online (Sandbox Code Playgroud)

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


Ouu*_*iii 7

我认为你可以使用isinstance(element, type)

我做了一个功能:

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)
Run Code Online (Sandbox Code Playgroud)

这输出:

It's an Integer
It's an Integer
It's an Integer
Run Code Online (Sandbox Code Playgroud)