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