Shh:
Eu tenho uma lista
l = [object0, object1, object2, object3, object4....object499]
comprimento máximo nunca é mais do que 500
Todos os objectos têm de atributo x, y, z, uma
Eu tenho que modificar object.y se duplicatas em object.x como:
if object9.x == object10.x:
object9.y = object9.z * object9.a/1000
object10.y = object10.y - object9.z * object9.a/1000
É garantido que duplicatas estará em objetos consecutivos.
Pode haver mais do que 2, isto é, por exemplo duplicados
object12.x == object13.x == object14.x
assim modificação vai proceder da mesma maneira do terceiro duplicado com base no valor de 2 duplicado modificado.
Eu escrevi um loop para fazê-lo, mas estava pensando se há alguma maneira Python / mais rápido de fazê-lo. Eu estou usando python3.7
EDITAR:
tag = None
for i, o in enumerate(l):
if tag is None:
x_a = o.x
elif x_a == o.x #duplicate found
temp = o.y
c_over = 0
c_value = o[i-1].z * o[i-1].a/1000
if c_value < o[i-1].y:
o[i-1].y = c_value
c_over = temp - c_value #carry over value
o[i] = c_over # either zero of carry over value
x_a = o.x
um convidado :
Desde que você está modificando atributos de seus objetos que puder loop sobre pares consecutivos via zip
:
for a, b in zip(l, l[1:]):
if a.x == b.x:
a.y = a.z * a.a/1000
b.y = b.y - a.y