shh:
Tengo una lista
l = [object0, object1, object2, object3, object4....object499]
longitud máxima es de no más de 500
Todos los objetos tienen atributos x, y, z, una
Tengo que modificar object.y si duplicados en object.x como:
if object9.x == object10.x:
object9.y = object9.z * object9.a/1000
object10.y = object10.y - object9.z * object9.a/1000
Se garantiza que los duplicados estarán en objetos consecutivos.
Puede haber más de 2 duplicados, es decir, por ejemplo
object12.x == object13.x == object14.x
así modificación procederá de la misma manera de la tercera duplicado basado en el valor de la segunda duplicado modificado.
He escrito un bucle para hacerlo, pero estaba pensando que si hay alguna manera Pythonic / más rápida de hacerlo. Estoy 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
un invitado :
Dado que se está modificando los atributos de los objetos puede recorrer a través de pares consecutivos a través de 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