Dada una lista de strings con varias jerarquías, la tarea es escribir un programa en Python para unir aquellas que tienen las mismas jerarquías.
Se sabe que los elementos en la misma dimensión antes de un cambio de dimensión están en la misma jerarquía.
Entrada: test_list = [«gfg», «mejor», [» para «, «todos»], «todos», [«CS», «geeks»]]
Salida: [‘gfg best’, [‘ for all ‘], ‘ all ‘, [‘ CS geeks ‘]]
Explicación: strings en una jerarquía similar a la que se unió.
Entrada: test_list = [«gfg», «mejor», [«para», «todos»], [«CS», «geeks»]]
Salida: [‘gfg best’, [‘ for all ‘], [‘ CS geeks ‘]]
Explicación: strings en una jerarquía similar a la que se unió.
Método 1: Usar type() , loop , recursion y join()
En esto, se verifica que el elemento de la lista sea una string usando type(), si se encuentra, la tarea de unión se realiza usando join para esa jerarquía. Si se encuentra que el elemento es una lista, la lista interna se recurre para una lógica similar para el siguiente nivel de jerarquía.
Ejemplo:
Python3
def hierjoin(test_list): res = [] temp = [] val = None for sub in test_list: # if string then appended if type(sub) == str: temp.append(sub) # if list, the string is joined for hierarchy # recurred for inner list else: res.append(''.join(temp)) temp = [] val = hierjoin(sub) res.append(val) if temp != []: res.append(''.join(temp)) return res # initializing list test_list = ["gfg ", " best ", [" for ", " all "], " all ", [" CS ", " geeks "]] # printing original list print("The original list is : " + str(test_list)) # calling recursion res = hierjoin(test_list) # printing result print("The joined strings : " + str(res))
Producción:
La lista original es: [‘gfg’, ‘best’, [‘for’, ‘all’], ‘all’, [‘CS’, ‘geeks’]]
Las strings unidas: [‘gfg best’, [‘ for all ‘], ‘ all ‘, [‘CS geeks’]]
Método 2: Usar join() , map() , recursividad y groupby()
En esta equijerarquía, los grupos se forman usando groupby(). Luego map() se usa para llamar a la función de recursión para la jerarquía interna de strings de listas.
Ejemplo:
Python3
from itertools import groupby def hierjoin(test_list): # groups are formed for similar hierarchy using groupby return [idx for x, y in groupby(test_list, key=str.__instancecheck__) for idx in ([''.join(y)] if x else map(hierjoin, y))] # initializing list test_list = ["gfg ", " best ", [" for ", " all "], " all ", [" CS ", " geeks "]] # printing original list print("The original list is : " + str(test_list)) # calling recursion res = hierjoin(test_list) # printing result print("The joined strings : " + str(res))
Producción:
La lista original es: [‘gfg’, ‘best’, [‘for’, ‘all’], ‘all’, [‘CS’, ‘geeks’]]
Las strings unidas: [‘gfg best’, [‘ for all ‘], ‘ all ‘, [‘CS geeks’]]
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