检查某个类型的对象是否存在于没有循环的列表中



我想检查某个对象类型是否在列表中,并且为了优化目的,我想不进行循环。

例如:

if list in Mylist:
do something

您正在查找值的类型,因此编写一个生成器来执行

if list in (type(v) for v in Mylist):
do something

这可能不会更快。事实上,我的测试显示我的机器速度较慢。以下是的一些性能测试

from timeit import timeit
Mylist = list(range(30)) + [[1, 2, 3]]
def use_generator():
return list in (type(v) for v in Mylist)
def use_for():
for v in Mylist:
if type(v) is list:
return True
return False
def use_generator_isinstance():
return any(isinstance(v, list) for v in Mylist)
def use_for_isinstance():
for v in Mylist:
if isinstance(v, list):
return True
return False
print("generator", timeit("use_generator()", globals=globals()))
print("for", timeit("use_for()", globals=globals()))
print("generator isinstance", timeit("use_generator_isinstance()", globals=globals()))
print("for isinstance", timeit("use_for_isinstance()", globals=globals()))

输出

generator 2.4875363089959137
for 1.4369069100066554
generator isinstance 2.4251753209973685
for isinstance 1.5919023430033121

在生成器的情况下,将创建一个生成器对象,并重复调用其__next__。我认为这解释了它的低性能。

最新更新