Python – Ordenar string por substrings enteras personalizadas

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))
Producción

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))
Producción

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

Deja una respuesta

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