是否有一种简单的方法可以检查tuple
中是否存在特定类型的对象?
我能想到的唯一方法是迭代tuple
并检查每个对象,但是知道python我觉得必须有更好的方法。
答案 0 :(得分:5)
问题的根源是你必须遍历列表。但是,有一些工具可以使这很容易,例如
if any(isinstance(x, <class>) for x in my_list):
当你找到第一个时,至少会发生短路。
答案 1 :(得分:4)
我无法想到比列表理解更好的方法。
result = [x for x in mylist if type(x) is bool]
如果有人得到更好的解决方案,我很想看到它
但是,我把自己的正确赌注押在这样一个事实上:除了涉及任何形状或形式的循环之外别无他法。在这种情况下,for
循环。
仅仅因为我在没有解释的情况下得到了一个漂亮的downvote,这里是迄今为止给出的替代方案的基准,这些是运行时间结果的中位数:
type() check: 0.837047815322876
isinstance() check: 0.84004807472229
any() check: 0.8540489673614502
代码相当粗糙,但这里是测试的gist 我真的不明白为什么这个列表理解的东西会变坏或者以任何方式出错。
同样,测试很粗糙,可能并不完美
但希望我没有弄乱any()
或任何我认为没有的收益运算符的使用。
答案 2 :(得分:0)
这应该有效:
if any(map(lambda x: isinstance(x, SomeClass), my_tuple)):
# do stuff
答案 3 :(得分:0)
type_you_are_checking_for in map(lambda x: type(x), your_objects_tuple)
的示例:
>>> str in map(lambda x: type(x), (1, "sfds"))
True
>>> str in map(lambda x: type(x), (1, 2))
False