Python | Eliminar sublistas que están presentes en otra sublista

Dada una lista de listas, escriba un programa Python para eliminar sublistas de la lista dada de listas que están presentes en otra sublista.

Ejemplos:

Input : [['a', 'b', 'c'], ['a', 'c'], ['a', 'b', 'c'], ['d']]
Output : [['a', 'b', 'c'], ['d']]

Input : [[1], [1, 2], [1, 2, 3], [0], [0, 1]]
Output : [[1, 2, 3], [0, 1]]

 
Enfoque n. ° 1: uso de Python Set (si el orden de la lista no importa)

Este enfoque hace uso de conjuntos de Python . Cree dos listas vacías ‘curr_res’ para almacenar la sublista actual y ‘resultado’ para almacenar las sublistas finalizadas. Convierta las sublistas en la lista dada de listas en conjuntos y ordénelos por longitud en orden inverso, de modo que pueda iterar a través de ellos y agregar cada conjunto a curr_res solo si no es un subconjunto de ninguno de los conjuntos existentes en los curr_res .
El único inconveniente de este enfoque es que puede producir el resultado de forma desordenada (ya que los conjuntos no están ordenados).

# Python3 program to remove sublists from
# list of lists that are in another sublist
  
def removeSublist(lst):
    curr_res = []
    result = []
    for ele in sorted(map(set, lst), key = len, reverse = True):
        if not any(ele <= req for req in curr_res):
            curr_res.append(ele)
            result.append(list(ele))
          
    return result
      
# Driver code
lst = [['a', 'b', 'c'], ['a', 'b'], ['a', 'b', 'c'], ['d']]
print(removeSublist(lst))
Producción:

[['c', 'b', 'a'], ['d']]

 
Enfoque n.º 2: uso del diccionario de Python (si el orden de la lista es importante)

Es posible que Dict no siempre produzca una salida ordenada, por lo tanto, puede usar OrderedDict desde el módulo de colecciones .

# Python3 program to remove sublists from
# list of lists that are in another sublist
from collections import OrderedDict
  
def removeSublist(lst):
    curr_result = []
    result = []
    for ele in sorted(map(OrderedDict.fromkeys, lst), key = len, reverse = True):
        if not any(ele.keys() <= req.keys() for req in curr_result):
            curr_result.append(ele)
            result.append(list(ele))
              
    return result
      
# Driver code
lst = [['a', 'b', 'c'], ['a', 'b'], ['a', 'b', 'c'], ['d']]
print(removeSublist(lst))
Producción:

[['a', 'b', 'c'], ['d']]

Publicación traducida automáticamente

Artículo escrito por Smitha Dinesh Semwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *