una tupla repetidos remover que números los lista identificar función escriba encontrar elimine eliminar elementos duplicados caracteres cadena python list python-2.7 duplicates

tupla - Eliminación eficiente de casi duplicados de la lista de Python



remover duplicados python (2)

¿Por qué no creas un dict que correlaciona los valores de 14dp con los correspondientes valores completos de 16dp?

d = collections.defaultdict(list) for x in l: d[round(x, 14)].append(x)

Ahora bien, si solo quiere valores "únicos" (según su definición), puede hacer

unique = [v[0] for v in d.values()]

Antecedentes :
El programa My Python maneja cantidades relativamente grandes de datos, que pueden generarse en el programa o importarse. Luego, los datos se procesan, y durante uno de estos procesos, los datos se copian deliberadamente y luego se manipulan, se limpian en busca de duplicados y luego se devuelven al programa para su uso posterior. Los datos que estoy manejando son muy precisos (hasta 16 decimales), y mantener esta precisión hasta al menos 14dp es vital. Sin embargo, las operaciones matemáticas por supuesto pueden devolver ligeras variaciones en mis flotadores, de modo que dos valores son idénticos a 14dp, pero pueden variar ligeramente a 16dp, por lo tanto, la función incorporada de set() no elimina correctamente tales ''duplicados'' (Utilicé este método para prototipar la idea, pero no es satisfactorio para el programa terminado). También debo señalar que es posible que esté pasando por alto algo simple. Estoy interesado en ver lo que otros piensan :)

Pregunta:
¿Cuál es la forma más eficiente de eliminar duplicados muy cercanos de un conjunto de datos potencialmente muy grande?

Mis intentos :
He intentado redondear los valores a 14dp, pero esto por supuesto no es satisfactorio ya que esto lleva a errores más grandes en el futuro. Tengo una solución potencial a este problema, pero no estoy seguro de que sea tan eficiente o "pitónico" como sea posible. Mi intento implica encontrar los índices de las entradas de la lista que coinciden con x dp, y luego eliminar una de las entradas coincidentes.

¡Gracias de antemano por cualquier consejo! Por favor, avíseme si hay algo que desee aclarar o, por supuesto, si estoy pasando por alto algo muy simple (es posible que esté en un punto en el que estoy pensando demasiado).

Aclaración sobre ''Duplicados'' :
Ejemplo de una de mis entradas ''duplicadas'': 603.73066958946424, 603.73066958946460, la solución eliminaría uno de estos valores.

Nota sobre decimal.Decimal:
Esto podría funcionar si se garantizara que todos los datos importados no tenían ya casi duplicados (lo que a menudo ocurre).


Realmente quiere usar NumPy si maneja grandes cantidades de datos. Así es como lo haría:

Importar NumPy:

import numpy as np

Genere 8000 flotadores de alta precisión (128 bits será suficiente para sus propósitos, pero tenga en cuenta que estoy convirtiendo la salida de 64 bits de random a 128 solo para simularlo. Utilice aquí sus datos reales):

a = np.float128(np.random.random((8000,)))

Encuentre los índices de los elementos únicos en la matriz redondeada:

_, unique = np.unique(a.round(decimals=14), return_index=True)

Y tome esos índices de la matriz original (no redondeada):

no_duplicates = a[unique]