Dadas dos listas anidadas, ‘lst1’ y ‘lst2’, escriba un programa Python para crear una nueva lista anidada ‘lst3’ a partir de las dos listas anidadas dadas, de modo que la nueva lista anidada conste de intersecciones comunes de ambas listas, así como de la elementos que no se cruzan.
Ejemplos:
Input : lst1 = [[5, 9], [8, 2, 6], [3, 4]] lst2 = [[9, 5, 8], [2, 6], [3, 4, 1]] Output : [[9, 5], [8], [2, 6], [3, 4], [1]] Input : lst1 = [['a', 'b', 'c'], ['x']] lst2 = [['b', 'c', 'y'], ['x', 'y']] Output : [['b', 'c'], ['x'], ['y'], ['a']]
Enfoque n.° 1: por intersección establecida usando functools.reduce()
Este método usa la intersección establecida para calcular cada intersección, luego agrega cualquier elemento que quede (es decir, los elementos que aparecen en solo una de las dos listas). Primero usaremos functools.reduce() para generar elementos únicos de ‘lst1’ y ‘lst2’ y guardarlos en ‘temp1’ y ‘temp2’ respectivamente. Después de esto, encuentre la intersección establecida de ambas listas en ‘lst3’. Por último, encuentre la diferencia simétrica de ‘lst1’ y ‘lst2’, que produce los elementos que aparecen en solo uno de los 2 conjuntos y agréguelos a ‘lst3’.
Python3
# Python3 program to find Greatest common # intersection of two nested lists import itertools import functools def GCI(lst1, lst2): temp1 = functools.reduce(lambda a, b: set(a).union(set(b)), lst1) temp2 = functools.reduce(lambda a, b: set(a).union(set(b)), lst2) lst3 = [list(set(a).intersection(set(b))) for a, b in itertools.product(lst1, lst2) if len(set(a).intersection(set(b))) != 0] lst3.extend([x] for x in temp1.symmetric_difference(temp2)) return lst3 # Driver code lst1 = [[5, 9], [8, 2, 6], [3, 4]] lst2 = [[9, 5, 8], [2, 6], [3, 4, 1]] print(GCI(lst1, lst2))
[[9, 5], [8], [2, 6], [3, 4], [1]]
Enfoque n.° 2: por intersección establecida usando filtro
Este es un enfoque eficiente sobre el enfoque n.° 1, ya que simplifica la intersección. Primero, aplane las listas anidadas. Tome Intersección usando filter() y guárdelo en ‘lst3’. Ahora busque elementos que no estén en lst1 o en lst2, y guárdelos en ‘temp’. Finalmente, agregue ‘temp’ a ‘lst3’.
Python3
# Python3 program to find Greatest common # intersection of two nested lists import itertools from functools import reduce def GCI(lst1, lst2): temp1 = reduce(list.__add__, lst1) temp2 = reduce(list.__add__, lst2) lst3 = list(filter(None, [list(set(o1) & set(o2)) for o1 in lst1 for o2 in lst2])) temp = filter(lambda x : x not in temp1 or x not in temp2, set(temp1) | set(temp2)) lst3.append(list(temp)) return lst3 # Driver code lst1 = [[5, 9], [8, 2, 6], [3, 4]] lst2 = [[9, 5, 8], [2, 6], [3, 4, 1]] print(GCI(lst1, lst2))
[[9, 5], [8], [2, 6], [3, 4], [1]]
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