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

6l7fqoea  于 2023-02-21  发布在  Python
关注(0)|答案(3)|浏览(197)

是否有一种方法可以检查列表/字典中是否存在特定数据类型的示例,* 而无需显式检查每个元素/键?*
我猜想答案是否定的。不过,如果它确实存在,我想它将类似于使用in操作符搜索特定元素/键的方式,如下所示:

3 in [1, 2, 3] # => True

只不过你要检查的是一个数据类型的示例,而不是某个特定的值,就像这样:

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

有什么想法吗?

ghhkc1vu

ghhkc1vu1#

in实际上是__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

您还可以利用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

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

jmo0nnb3

jmo0nnb32#

我想你可以使用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)

这将输出:

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

nfg76nw03#

你可以这样做,这将是你的输入列表,你可以检查它的迭代,我通过了两次

a = [2, 4, 5, 6, '8', 9, 8]
for i in a:
    if i in [2, 8] and type(i) == int:
        print('pass')

相关问题