Dada uma lista de listas, escreva um programa Python para remover todas as sublistas repetidas (também com ordem diferente) de determinada lista.

Exemplos:

Entrada: [[1], [1, 2], [3, 4, 5], [2, 1]]
 Saída: [[1], [1, 2], [3, 4, 5]]
Entrada: [['a'], ['x', 'y', 'z'], ['m', 'n'], ['a'], ['m', 'n']]
 Saída : [['a'], ['x', 'y', 'z'], ['m', 'n']]

 
Abordagem # 1: Definir compreensão + Descompactar

Nossa primeira abordagem é usar o conjunto compreensão de com tupla classificada . Em cada iteração na lista, convertemos a sublista atual em uma tupla classificada e retornamos um conjunto de todas essas tuplas, que por sua vez elimina todas as ocorrências repetidas das sublistas e, portanto, removemos todas as sublistas reorganizadas repetidas.

def Remove(lst): 
     return ([list(i) for i in {*[tuple(sorted(i)) for i in lst]}])   
       
lst = [[1], [1, 2], [3, 4, 5], [2, 1]] 
print(Remove(lst)) 
Resultado:

[[1, 2], [3, 4, 5], [1]]

 
Abordagem # 2: Usando map() com set tuplas e classificadas .

def Remove(lst): 
     return list(map(list, (set(map(lambda x: tuple(sorted(x)), lst))))) 
       
lst = [[1], [1, 2], [3, 4, 5], [2, 1]] 
print(Remove(lst)) 
Resultado:
[[1, 2], [3, 4, 5], [1]]

Com a manutenção da ordem -

Abordagem nº 3: usando tupla classificada como hash

Primeiro, inicializamos uma lista vazia como 'res' e um conjunto como 'check'. Agora, para cada sublista na lista, converta a sublista em tupla classificada e salve-a em 'hsh'. Em seguida, verifique se hsh está presente na verificação ou não. Caso contrário, anexe a sublista atual a '.res' e 'hsh' a 'verificar'. Dessa forma, seria mais fácil manter a ordem das sublistas.

def Remove(lst): 
     res = [] 
     check = set() 
  
     for x in lst: 
         hsh = tuple(sorted(x)) 
         if hsh not in check: 
             res.append(x) 
             check.add(hsh) 
               
     return res 
       
lst = [[1], [1, 2], [3, 4, 5], [2, 1]] 
print(Remove(lst)) 
Resultado:
[[1], [1, 2], [3, 4, 5]]