是否存在對任意類的對象列表中的每個元素(或更準確地說是元素的子集)執行簡單遞減操作的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