是否存在对任意类的对象列表中的每个元素(或更准确地说是元素的子集)执行简单递减操作的pythonic /高效方法?在对象列表中矢量化递减操作
我可能有一个大对象(〜10K)对象列表,每个对象都是基于倒计时“更新时间”(TTU)值而定期更新的。
简单的方式来处理,这将是递减的,如下每个元素此值:
def BatesNumber(start = 0):
n = start
while True:
yield n
n += 1
class foo:
index = BatesNumber()
def __init__(self, ttu):
self.id = next(foo.index)
self.time = ttu
self.ttu = ttu
def __repr__(self):
return "#{}:{}/{}".format(self.id, self.ttu, self.time)
def Decrement(self):
self.ttu -= 1
def Reset(self):
print("Reset {} to {}".format(self.id, self.time))
self.ttu = self.time
def IsReadyForUpdate(self):
if self.ttu == 0:
return True
else:
return False
bar = [foo(i) for i in range(10, 20, 2)]
for n in range(50):
for p in bar:
if p.IsReadyForUpdate():
print("{} {}".format(n, p))
p.Reset()
else:
p.Decrement()
所以我想我是后是“向量化”的减量操作的一些Python的方式 - 即减量以适当优雅的方式列表中的所有元素;并且理想地返回那些需要更新/重置的元素。
我可以(虽然看起来有点不必要的可怕)产生一个按照TTU值排序的列表,并且具有相对于它们的邻居的所有TTU值。这样我每循环只需要一次递减,但是当我重置计数器时,我有重建列表的痛苦。我想这对TTU值相当高的非常长的名单会更好。
我认为最好的/ Pythonic的方法来检查哪些元素准备好更新正在使用列表理解。
有什么建议吗?
列表本身不会改变:它会保持相同的大小,但是当TTU耗尽在它单个元素将被更新,然后TTU将被重置。目前(虽然我对这个问题的思考还在开发中)我怀疑,列表中的每个元素都将更新平均约每5-10“蜱”,所以每次勾选对象的10%-20%将更新。 (也许我应该在我的职务,我希望它循环提到说每10毫秒或者如果可能的话,也许1毫秒,因此需要一个高效的更新)。 – TimGJ