Editar: Después de descubrir la persona que hace la pregunta simplemente no sabía nada de __hash__
he proporcionado esta información en un comentario:
Para utilizar conjuntos, implementar __hash__
. Por lo tanto, si obj1 == obj2
cuando obj1.a == obj2.a and ob1.b == obj2.b
, __hash__
debe ser return hash((self.a, self.b))
y sus conjuntos funcionarán como se esperaba.
Eso resolvió su problema, y cambiaron a usar conjuntos.
El resto de esta respuesta ahora es obsoleta, pero sigue siendo correcta (pero terriblemente ineficaz) así que lo dejo aquí.
Este código hace lo que quiere. Al final, newx
y newy
son los elementos que no se solapan de x
y y
específicamente.
x = [1,2,3,4,4,5,6,7,7]
y = [3,4,5,6,7,8,9,10]
# you can leave out bad and just compare against
# x at the end if memory is more important than speed
newx, bad, newy = [], [], []
for i in x:
if i in y:
callsomefunction(i)
bad.append(i)
else:
newx.append(i)
for i in y:
if i not in bad:
newy.append(i)
print newx
print newy
Sin embargo, sé sin siquiera ver su código que esta es la manera incorrecta de hacer esto. Ciertamente puedes hacerlo con sets, pero si no quieres hacerlo, eso depende de ti.
Sus ejemplos están ordenados. ¿Sus datos reales están ordenados? –
mis datos no se almacenan .. – user739807
¿Los datos son ordenables? ¿Por qué tus datos no son manejables? ¿Qué tan grandes son 'x' y' y'? –