Me encontré con el siguiente código para eliminar duplicados de una lista:
seen = set(); print [i for i in list if i not in seen and not seen.add(i)]
No pude comprender qué es exactamente "y no visto.add(i)"esta parte del código está haciendo lo mismoayuda(set.add)da la siguiente explicación:
add(...)
Add an element to a set.
This has no effect if the element is already present.
Espero su ayuda para entenderlo.
Respuesta1
La comprensión de la lista itera sobre los valores de la lista original/de entrada. Queremos que se agregue un valor a la lista nueva/de salida si y solo si aún no se ha visto, de ahí la expresión condicional if i not in seen
. Cuando se agrega un nuevo valor a la lista nueva/de salida, el seen
conjunto debe actualizarse, de ahí la seen.add(i)
llamada a la función. Sin embargo, el set.add()
método devuelve None
, que se evalúa como False
. Por lo tanto not
se agrega el operador, para que not seen.add(i)
siempre devuelva True
.