Python: strings separadas en listas

Dadas dos listas, extraiga todos los pares de strings que son disjuntas, es decir, que no tienen ningún carácter en común.

Entrada : lista_prueba1 = [“haritha”, “es”, “mejor”], lista_prueba2 = [“ella”, “ama”, “papaya”] 
Salida : [(‘haritha’, ‘ama’), (‘es’ , ‘papaya’), (‘mejor’, ‘papaya’)] 
Explicación : “es” y “papaya” no tienen ningún carácter en común.

Entrada : test_list1 = [aa, cab], test_list2 = [“a”, “c”] 
Salida : [] 
Explicación : No hay par de strings separadas. 

Enfoque: Usar set() + yield [generador] + reduce() + recursividad

En esto, realizamos tareas para obtener las strings separadas usando set & operation y extrayendo dinámicamente usando yield. Cada string subsiguiente se comprueba en busca de disjuntos mediante la recursividad.

Python3

# Python3 code to demonstrate working of
# Disjoint Strings across Lists
# Using set() + yield [ generator ] + reduce() + recursion
from functools import reduce
  
# helper function
def dis_pairs(dpair, res=[]):
  
    # checking for disjoint pair
    if not dpair and not reduce(lambda a, b: set(a) & set(b), res):
        yield tuple(res)
  
    # recurring for subsequent pairs
    elif dpair:
        yield from [idx for k in dpair[0] for idx in dis_pairs(dpair[1:], res + [k])]
  
  
# initializing lists
test_list1 = ["haritha", "is", "best"]
test_list2 = ["she", "loves", "papaya"]
  
# printing original lists
print("The original list 1 is : " + str(test_list1))
print("The original list 2 is : " + str(test_list2))
  
# calling function
res = list(dis_pairs([test_list1, test_list2]))
  
# printing result
print("All possible Disjoint pairs : " + str(res))

Producción:

La lista original 1 es: [‘haritha’, ‘es’, ‘mejor’]
La lista original 2 es: [‘ella’, ‘ama’, ‘papaya’]
Todos los pares disjuntos posibles: [(‘haritha’, ‘ ama’), (‘es’, ‘papaya’), (‘mejor’, ‘papaya’)]

Publicación traducida automáticamente

Artículo escrito por manjeet_04 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 *