【问题标题】:Python: check for data type in listPython:检查列表中的数据类型
【发布时间】:2018-04-05 19:11:30
【问题描述】:

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

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

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

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

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

有什么想法吗?

【问题讨论】:

  • 不,您必须检查列表中的每个元素,或者自己跟踪列表中的类型。 Python list 对象不知道它包含的对象的类型。请注意,in 运算符检查每个元素
  • 看看这个,几乎与有趣答案相似的问题。 stackoverflow.com/questions/13252333/…
  • 您的第一个问题的答案是否定的。不迭代元素是不可能的。

标签: python search types find


【解决方案1】:

in 实际上是 __contains__ 的语法糖,does iterate 覆盖了列表的内容。

如果您想改用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

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

【讨论】:

  • 自定义类可以包含一组类型,每次插入/删除都会更新......所以检查可以很快......如果我们采用自定义类方式:-)
  • 实际上每个数据类型的计数器会更好。 __contains__ 还可以检查参数的 type 是否为 type... 我看到一个新的 UserTypeList 正在诞生 ;)
【解决方案2】:

我认为你可以使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2021-12-01
    • 2012-05-08
    • 1970-01-01
    • 2020-02-16
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多