Dada una lista de strings, ordene las strings por la ocurrencia de substring de la lista.
Entrada : test_list = [“Bien a las 4”, “Despertar a las 7”, “Trabajar hasta las 6”, “Dormir a las 11”], subord_list = [“11”, “7”, “4”, “6”]
Salida : [‘Dormir a las 11’, ‘Despertar a las 7’, ‘Bien a las 4’, ‘Trabajar hasta las 6’]
Explicación : Strings ordenadas por presencia de substrings.Entrada : test_list = [“Bueno a las 9”, “Despertar a las 7”, “Trabajar hasta las 6”, “Dormir a las 11”], subord_list = [“11”, “7”, “9”, “6”]
Salida : [‘Dormir a las 11’, ‘Despertar a las 7’, ‘Bien a las 9’, ‘Trabajar hasta las 6’]
Explicación : Strings ordenadas por presencia de substrings.
Método #1: Usar sorted() + zip() + lambda + regex()
La combinación de las funciones anteriores se puede utilizar para resolver este problema. En esto, realizamos la tarea de ordenar por substring usando regex() y sorted(), zip() se usa para producir el resultado final.
Python3
# Python3 code to demonstrate working of # Sort String by Custom Substrings # Using sorted() + zip() + lambda + regex() import re # initializing list test_list = ["Good at 4", "Wake at 7", "Work till 6", "Sleep at 11"] # printing original list print("The original list : " + str(test_list)) # initializing substring list subord_list = ["6", "7", "4", "11"] # creating inverse mapping with index temp_dict = {val: key for key, val in enumerate(subord_list)} # custom sorting temp_list = sorted([[ele, temp_dict[re.search("(\d+)$", ele).group()]] \ for ele in test_list], key = lambda x: x[1]) # compiling result res = [ele for ele in list(zip(*temp_list))[0]] # printing result print("The sorted list : " + str(res))
The original list : ['Good at 4', 'Wake at 7', 'Work till 6', 'Sleep at 11'] The sorted list : ['Work till 6', 'Wake at 7', 'Good at 4', 'Sleep at 11']
Método #2: Usar sorted() + zip() + comparador + regex()
Esta es otra forma más en la que se puede realizar esta tarea. En esta funcionalidad similar que se usa como el método anterior, la diferencia es que la función de comparación se envía a sorted() en lugar de lambda para ordenar.
Python3
# Python3 code to demonstrate working of # Sort String by Custom Substrings # Using sorted() + comparator + regex() import re # helper function to solve problem def hlper_fnc(ele): temp = re.search("(\d+)$", ele).group() return temp_dict[temp] if temp in temp_dict else int(temp) # initializing list test_list = ["Good at 4", "Wake at 7", "Work till 6", "Sleep at 11"] # printing original list print("The original list : " + str(test_list)) # initializing substring list subord_list = ["6", "7", "4", "11"] # creating inverse mapping with index temp_dict = {val: key for key, val in enumerate(test_list)} # sorting using comparator test_list.sort(key = lambda ele: hlper_fnc(ele)) # printing result print("The sorted list : " + str(test_list))
The original list : ['Good at 4', 'Wake at 7', 'Work till 6', 'Sleep at 11'] The sorted list : ['Good at 4', 'Work till 6', 'Wake at 7', 'Sleep at 11']
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