Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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_Tuples - Fatal编程技术网

Python 确定元组中是否存在特定类型的对象

Python 确定元组中是否存在特定类型的对象,python,tuples,Python,Tuples,有没有一种简单的方法可以检查元组中是否存在特定类型的对象 我唯一能想到的方法是迭代元组,检查每个对象,但了解python我觉得必须有更好的方法。我想不出比列表理解更好的方法了 result = [x for x in mylist if type(x) is bool] 如果有人有更好的解决方案,我很想看看。 但我把我的正确赌注押在这样一个事实上:没有别的办法,只有让一个环以任何形状或形式出现。在这种情况下,一个用于循环 就因为我在没有任何解释的情况下获得了漂亮的否决票,这里是迄今为止给出的

有没有一种简单的方法可以检查
元组中是否存在特定类型的对象


我唯一能想到的方法是迭代
元组,检查每个对象,但了解python我觉得必须有更好的方法。

我想不出比列表理解更好的方法了

result = [x for x in mylist if type(x) is bool]
如果有人有更好的解决方案,我很想看看。
但我把我的正确赌注押在这样一个事实上:没有别的办法,只有让一个环以任何形状或形式出现。在这种情况下,一个
用于
循环


就因为我在没有任何解释的情况下获得了漂亮的否决票,这里是迄今为止给出的备选方案的基准,这些是运行时结果的中位数:

type() check: 0.837047815322876
isinstance() check: 0.84004807472229
any() check: 0.8540489673614502
代码相当粗糙,但下面是测试的结果。
我真的不明白为什么这件事会不好,或者在任何方面都是错误的

  • 它检查特定类型(根据要求)
  • 您将获得该类型的所有元素的列表
  • 它比其他选择更快
  • 同样,测试是粗糙的,可能并不完美。

    但希望我没有弄乱
    any()
    或我没有想到的任何yield运算符的使用。

    在问题的根源上,您确实需要迭代列表。但是,有一些工具可以使这变得容易,例如

    if any(isinstance(x, <class>) for x in my_list):
    
    如果有(my_列表中x的实例(x,):
    
    至少当您找到第一个时,它会短路。

    这应该可以:

    if any(map(lambda x: isinstance(x, SomeClass), my_tuple)):
        # do stuff
    
    示例:

    >>> str in map(lambda x: type(x), (1, "sfds"))
    True
    >>> str in map(lambda x: type(x), (1, 2))
    False
    

    既然
    for
    循环不是一个好方法?不,作为一个有序序列,除了遍历每个元素之外没有其他方法。@GLHF我只是想知道是否有一种更像python的方法来完成它。看在皮特的份上,今晚的反对票是什么?如果type(x)是bool
    ,可能是因为使用
    而不是
    如果是instance(x,bool)
    但是“特定类型的对象”让我觉得检查确切的特定类型对于这种情况来说是好的。@Tadhgmandald Jensen可能是原因。我可以理解为什么应该使用
    isinstance
    。但是正如你所说,OP想检查类型,而不是其他。因为
    type()
    通常比
    isinstance()快。
    我选择了快速和简单。它确实有效,但请注意,任何时候都可以使用
    映射(lambda x:some_operation(x),thing)
    执行
    (some_operation(x)for x in thing)
    >>> str in map(lambda x: type(x), (1, "sfds"))
    True
    >>> str in map(lambda x: type(x), (1, 2))
    False