优化列表中每个 class 实例的检查属性
Optimize checking attribute of each class instance inside a list
假设我有一个简单的 class,它有一个属性 x
:
class A:
def __init__(self):
self.x = random.randint(-5, 5) # not the most efficient, but it serves purposes well
我也会有一个列表,其中有数百个 class:
Az = []
for i in range(150):
Az.append(A())
现在,假设我想遍历 Az
中的所有 A
,运行 class 中的一个函数 x
属性相当于小于一。这是一种方式,可惜效率很低:
for cls in Az:
if cls.x<1:
func1(cls) # A random function that accepts a class as a parameter, and does something to it
所以,总结一下,我的问题:如何优化检查速度?
只优化第三步很棘手。为什么不从第二步开始,保存属性 x <1 的 类 的列表 ID?
Az = []
ids = []
for i, id in enumerate(range(150)):
cls = A()
if cls.x < 1:
ids.append(id)
Az.append(cls)
然后修改第三步:
for id in ids:
func1(Az[id])
假设我有一个简单的 class,它有一个属性 x
:
class A:
def __init__(self):
self.x = random.randint(-5, 5) # not the most efficient, but it serves purposes well
我也会有一个列表,其中有数百个 class:
Az = []
for i in range(150):
Az.append(A())
现在,假设我想遍历 Az
中的所有 A
,运行 class 中的一个函数 x
属性相当于小于一。这是一种方式,可惜效率很低:
for cls in Az:
if cls.x<1:
func1(cls) # A random function that accepts a class as a parameter, and does something to it
所以,总结一下,我的问题:如何优化检查速度?
只优化第三步很棘手。为什么不从第二步开始,保存属性 x <1 的 类 的列表 ID?
Az = []
ids = []
for i, id in enumerate(range(150)):
cls = A()
if cls.x < 1:
ids.append(id)
Az.append(cls)
然后修改第三步:
for id in ids:
func1(Az[id])