Tengo una lista de listas como esta:
i = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]]
Me gustaría obtener una lista que contenga listas “únicas” (basadas en sus elementos) como:
o = [[1, 2, 3], [2, 4, 5]]
No puedo usar set()
ya que hay elementos no hashable en la lista. En cambio, estoy haciendo esto:
o = [] for e in i: if e not in o: o.append(e)
¿Hay alguna forma más fácil de hacer esto?
Puede crear un conjunto de tuplas, un conjunto de listas no será posible debido a los elementos no hashables como mencionó.
>>> l = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]] >>> set(tuple(i) for i in l) {(1, 2, 3), (2, 4, 5)}
i = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]] print([ele for ind, ele in enumerate(i) if ele not in i[:ind]]) [[1, 2, 3], [2, 4, 5]]
Si considera que [2, 4, 5]
es igual a [2, 5, 4]
entonces tendrá que hacer más comprobaciones.
Puedes convertir cada elemento en una tupla y luego insertarlo en un conjunto.
Aquí hay un código con tu ejemplo:
tmp = set() a = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]] for i in a: tmp.add(tuple(i))
tmp
será así:
{(1, 2, 3), (2, 4, 5)}