Dadas dos listas, ordene los valores de una lista usando la segunda lista.
Ejemplos:
Input : list1 = ["a", "b", "c", "d", "e", "f", "g", "h", "i"] list2 = [ 0, 1, 1, 0, 1, 2, 2, 0, 1] Output :['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g'] Input : list1 = ["g", "e", "e", "k", "s", "f", "o", "r", "g", "e", "e", "k", "s"] list2 = [ 0, 1, 1, 0, 1, 2, 2, 0, 1] Output : ['g', 'k', 'r', 'e', 'e', 'g', 's', 'f', 'o']
Acercarse :
- Comprima las dos listas.
- Cree una nueva lista ordenada basada en el zip usando sorted().
- Usando una lista de comprensión, extraiga los primeros elementos de cada par de la lista ordenada y comprimida.
Concepto:
el propósito de zip() es mapear un índice similar de múltiples contenedores para que puedan usarse como una sola entidad.
A continuación se muestra la implementación del enfoque anterior:
Python
# Python program to sort # one list using # the other list def sort_list(list1, list2): zipped_pairs = zip(list2, list1) z = [x for _, x in sorted(zipped_pairs)] return z # driver code x = ["a", "b", "c", "d", "e", "f", "g", "h", "i"] y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1] print(sort_list(x, y)) x = ["g", "e", "e", "k", "s", "f", "o", "r", "g", "e", "e", "k", "s"] y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1] print(sort_list(x, y))
Producción:
['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g'] ['g', 'k', 'r', 'e', 'e', 'g', 's', 'f', 'o']
Complejidad de tiempo: O(nlogn)
Espacio auxiliar: O(n)
En el código anterior, tenemos dos listas, la primera lista se ordena con respecto a los valores de la segunda lista.
y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]
Aquí primero se comprueba el valor más bajo. Como en esta lista, 0 es el más bajo, por lo que a partir del primer índice, 0 es el más bajo y está en el índice 0. Entonces, el valor del índice 0 se almacena en el índice 0 en la primera lista. De manera similar, 0 se encuentra nuevamente en el índice 3 y, por lo tanto, el valor del índice 3 en la primera lista es el índice 1. Lo mismo ocurre hasta que la lista no se completa.
Enfoque 2: mediante el uso de Diccionario, comprensión de listas, función lambda
Python3
def sorting_of_element(list1,list2): # initializing blank dictionary f_1 = {} # initializing blank list final_list = [] # Addition of two list in one dictionary f_1 = {list1[i]: list2[i] for i in range(len(list2))} # sorting of dictionary based on value f_lst = {k: v for k, v in sorted(f_1.items(), key=lambda item: item[1])} # Element addition in the list for i in f_lst.keys(): final_list.append(i) return final_list list1 = ["a", "b", "c", "d", "e", "f", "g", "h", "i"] list2 = [ 0, 1, 1, 0, 1, 2, 2, 0, 1] list3=sorting_of_element(list1,list2) print(list3)
Producción:
['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g']
Complejidad de tiempo : O (nlogn)
Complejidad espacial : O(n)