python encontrar objetos duplicados em uma lista

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

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=282886&siteId=1
Recomendado
Clasificación